我使用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)
有没有更好,更优雅的方式来做到这一点?
我经常使用的通用表单是:
ddply(raw_data, .(id, date, classification), function(x) data.frame( no_entries=nrow(x) )
Run Code Online (Sandbox Code Playgroud)
我ddply几乎一直在我的语句中使用匿名函数,所以上面的成语与匿名函数很好地融合.这不是表达函数的最简洁的方式,nrow()但是我传递多个参数的函数,我非常喜欢它.
你可以使用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为你做检查.