2011-07-28 97 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()這樣的函數的最簡潔的方式,但是具有傳遞多個參數的函數,我非常喜歡它。