ddply聚合列名

时间:2011-07-28 17:18:59

标签: r plyr

我正在使用ddply来聚合我的数据,但没有找到一种优雅的方法来将列名分配给输出数据框。

目前我正在这样做:

agg_data <- ddply(raw_data, .(id, date, classification), nrow)
names(agg_data)[4] <- "no_entries"

和这个

agg_data <- ddply(agg_data, .(classification, date), colwise(mean, .(no_entries)) )
names(agg_data)[3] <- "avg_no_entries"

有更好,更优雅的方法吗?

2 个答案:

答案 0 :(得分:9)

我经常使用的通用表格是:

 ddply(raw_data, .(id, date, classification), function(x) data.frame( no_entries=nrow(x) )

我几乎一直在我的ddply语句中使用匿名函数,所以上面的成语与匿名函数很好地融合。这不是表达像nrow()这样的函数最简洁的方法,但是我传递多个参数的函数,我非常喜欢它。

答案 1 :(得分:8)

您可以使用summarise

agg_data <- ddply(raw_data, .(id, date, classification), summarise, "no_entries" = nrow(piece))

如果length(<column_name>)不起作用,您可以使用nrow(piece)。例如,这是一个应该由任何人运行的例子:

ddply(baseball, .(year), summarise, newColumn = nrow(piece))

ddply(baseball, .(year), summarise, newColumn = length(year))

修改

或者,正如Joshua评论的那样,全部大写版本NROW会为您进行检查。