2009-09-08 38 views
11

哈德利使我對在plyr包,我覺得用它自己所有的時間「按組」之類的東西做的。但是,我發現自己不得不經常重新命名所產生的列,因爲它們默認爲V1,V2等重命名與plyr包輸出列中的R

下面是一個例子:

mydata<-data.frame(matrix(rnorm(144, mean=2, sd=2),72,2),c(rep("A",24),rep("B",24),rep("C",24))) 
colnames(mydata) <- c("x_value", "acres", "state") 
groupAcres <- ddply(mydata, c("state"), function(df)c(sum(df$acres))) 
colnames(groupAcres) <- c("state","stateAcres") 

有沒有一種方法,使ddply命名結果列於我,所以我可以省略最後一行?

+0

JD-也就是說第一行代碼不運行,應該是RNORM(...,72 ,2),例如: MYDATA <-data.frame(矩陣(RNORM(144,平均值= 2,SD = 2),72,2),C(REP( 「A」,24),代表(「B 」,24),代表( 「C」,24)))」 – medriscoll 2009-10-24 07:39:38

+0

福氣!我編輯了我的例子。謝謝! – 2009-10-26 14:38:30

回答

10

這似乎工作:

> groupAcres <- ddply(mydata, c("state"), function(df) c(myName=sum(df$acres))) 
> groupAcres 
    state myName 
1  A 56.87973 
2  B 57.84451 
3  C 52.82415 
+5

我過R語法矇混過關並沒有真正理解它。爲什麼人們需要連接功能? – Farrel 2010-04-16 19:57:28

+0

@Farrel:爲了讓數據項的名稱。使用'data.frame'代替工作。 – krlmlr 2013-03-21 19:12:46

19

使用總結(或總結):

groupAcres <- ddply(mydata, "state", summarise, 
    myName = sum(acres)) 
+0

這是一個很好的解決方法。我選擇克里斯的答案只是因爲它更一般。我將在未來使用他的方法和你的方法。我希望我可以合併它們或接受它們兩者 – 2009-09-12 17:44:42

+1

我的方法實際上稍微更一般(因爲如果您返回多個類型,它們可以具有不同的類型)。我寫下了這個用法的總結。 – hadley 2009-09-12 19:13:53

+0

我不能讓這種方法適合我,因爲我現在用的是nrow函數來彙總的數據子集的行數,任何提示? – 2011-12-01 01:47:18