首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: ddply只返回矩阵列的第一列

R: ddply只返回矩阵列的第一列
EN

Stack Overflow用户
提问于 2015-08-13 07:42:17
回答 1查看 137关注 0票数 0

我有一个data.frame D,其中一些列是矩阵。

代码语言:javascript
复制
> head(round(D$equationRTs, 1))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]  2.9  2.1  3.2  3.5   NA   NA   NA
[2,]  2.8   NA   NA   NA   NA   NA   NA
[3,]  3.4  2.4   NA   NA   NA   NA   NA
[4,]  2.7  2.9  1.9   NA   NA   NA   NA
[5,]  3.6  2.6  2.4  2.4  3.4  2.8   NA
[6,]  2.4  2.0  3.3  2.8  2.8  2.6  3.6
...

> dim(D$equationRTs)
[1] 11277     7

> typeof(D$equationRTs)
[1] "double"

但是,当我对子集ddply执行D

代码语言:javascript
复制
my_function = function(df) {
    # Let's see what ddply passes to this function:
    print(head(round(df$equationRTs, 1)))
    print(dim(df$equationRTs))
    print(typeof(df$equationRTs))
}

D = ddply(D, .(id), my_function)

似乎只有第一列作为向量传递给my_function

代码语言:javascript
复制
[1] 2.9 2.8 3.4 2.7 3.6 2.4
NULL
[1] "double"

第2-6列刚刚消失。这里发生了什么,以及当子集被传递给my_function时,如何使矩阵列保持不变

奖励:看起来ddply是在做类似于D$equationRTs[id==x]的事情,它确实返回矩阵的第一列,而D$equationRTs[id==x, ]则返回矩阵。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-18 21:39:32

您只需手动编写ddply所做的(或应该做的.)代码。

所以换个旧的

代码语言:javascript
复制
D = ddply(D, .(id), my_function)

使用

代码语言:javascript
复制
for(id in levels(D$id)) {
    D[D$id == id, ] = check_quality(D[D$id == id, ])
}

手动版本具有所需的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31982323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档