2011-07-28 103 views
9

我使用ddply来聚合我的数据,但还没有找到一个优雅的方式来分配列名到输出数据框。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" 

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

+0

你可能也想看'count' – hadley

回答

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 = length(year)) 

编辑

或者约书亚意见,全部大写的版本,NROW做的检查您。

+1

'NROW'为你做了必要的检查。 –

+0

@Joshua - 哇,谢谢,真不敢相信我不知道那个...... – joran

+1

很好用;我不知道'piece'变量。当我已经使用colwise功能时,你是否知道它是如何工作的?我在上面的问题中添加了第二个示例。 – behas

9

通用的形式我用了很多的是:

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

我使用匿名函数在我ddply语句几乎所有的时间,所以上面的成语用匿名函数是吻合。这不是表达像nrow()这样的函数的最简洁的方式,但是具有传递多个参数的函数,我非常喜欢它。