ddply聚合列名

beh*_*has 9 r plyr

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

目前我这样做:

agg_data <- ddply(raw_data, .(id, date, classification), nrow)
names(agg_data)[4] <- "no_entries"
Run Code Online (Sandbox Code Playgroud)

还有这个

agg_data <- ddply(agg_data, .(classification, date), colwise(mean, .(no_entries)) )
names(agg_data)[3] <- "avg_no_entries"
Run Code Online (Sandbox Code Playgroud)

有没有更好,更优雅的方式来做到这一点?

JD *_*ong 9

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

 ddply(raw_data, .(id, date, classification), function(x) data.frame( no_entries=nrow(x) )
Run Code Online (Sandbox Code Playgroud)

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


jor*_*ran 8

你可以使用summarise:

agg_data <- ddply(raw_data, .(id, date, classification), summarise, "no_entries" = nrow(piece))
Run Code Online (Sandbox Code Playgroud)

或者你可以使用length(<column_name>)if nrow(piece)不起作用.例如,这是一个应该由任何人运行的示例:

ddply(baseball, .(year), summarise, newColumn = nrow(piece))
Run Code Online (Sandbox Code Playgroud)

要么

ddply(baseball, .(year), summarise, newColumn = length(year))
Run Code Online (Sandbox Code Playgroud)

编辑

或者,正如约书亚评论,所有大写版本,NROW为你做检查.