将"by"对象转换为R中的数据框

Lor*_*ein 17 aggregate r dataframe

我正在使用R中的"by"函数来切断数据框并将函数应用于不同的部分,如下所示:

pairwise.compare <- function(x) {
Nright <- ...
Nwrong <- ...
Ntied <- ...
return(c(Nright=Nright, Nwrong=Nwrong, Ntied=Ntied))
}
Z.by <- by(rankings, INDICES=list(rankings$Rater, rankings$Class), FUN=pairwise.compare)
Run Code Online (Sandbox Code Playgroud)

结果(Z.by)看起来像这样:

: 4 
: 357 
Nright Nwrong Ntied
     3      0     0
------------------------------------------------------------
: 8 
: 357 
NULL
------------------------------------------------------------
: 10 
: 470 
Nright Nwrong Ntied
     3      4     1 
------------------------------------------------------------ 
: 11 
: 470 
Nright Nwrong Ntied
    12      4     1
Run Code Online (Sandbox Code Playgroud)

我想要的是将此结果转换为数据框(不存在NULL条目),所以它看起来像这样:

  Rater Class Nright Nwrong Ntied
1     4   357      3      0     0
2    10   470      3      4     1
3    11   470     12      4     1
Run Code Online (Sandbox Code Playgroud)

我怎么做?

Sha*_*ane 17

by函数返回一个列表,因此您可以执行以下操作:

data.frame(do.call("rbind", by(x, column, mean)))
Run Code Online (Sandbox Code Playgroud)

  • 我建议更改你的`pairwise.compare`函数来返回这两个字段.否则你将不得不使用`lapply`例程(或`plyr`)来获取列表名称和值(这是一个额外的步骤). (2认同)

fra*_*nkc 8

考虑在plyr包中使用ddply而不是使用.它处理将列添加到数据框的工作.

  • 令人惊讶的是,这是被接受且评价最高的答案,但没有任何代码显示如何使用 ddply 函数解决问题。我认为这应该是一个评论。 (3认同)