2014-09-25 91 views
1

我使用R.聚合函數,我可以得到彙總日期和ID很容易像這樣每列的方式聚集一個數據幀多於一個類型:合計數據幀由R中

aggregate(dataframe, by=list(dataframe$date, dataframe$id), FUN=mean, na.rm=TRUE) 

哪有我彙總了一些列作爲手段和其他作爲和?

+0

使用兩個不同的調用。 '聚合'將相同的功能應用於每個非組列。或者使用'split'和'lapply'自定義函數。 SO上必須有大量的工作實例,但沒有使用這種策略。 – 2014-09-25 20:15:53

回答

2

使用summaryBy功能從doBy包可以幫助在那裏你可以提供多種功能:

require(doBy) 
summaryBy(list("date", "id"), data = dataframe, FUN = c(mean, sum), na.rm=TRUE) 

如果你想具體列有特定的功能,data.table包可能使它成爲最容易。

require(data.table) 
dt <- data.table(data.frame) 

# set "V1" and "V2" ... "VX" to whichever columns you are interested in 
dt.out <- dt[, list(s.v1=sum(V1), m.v2=mean(V2)), 
      by=c("date", "id")] 
+0

這看起來很有趣...但是我們如何指定哪個列獲取哪個函數? – Cybernetic 2014-09-25 20:10:32

+0

@Cyber​​netic,你可以使用'data.table'包來做到這一點。 – cdeterman 2014-09-25 20:20:04

+0

這工作完美。謝謝。 – Cybernetic 2014-09-25 20:44:54

1

使用你的代碼,一個直接的方法是

res1 <- aggregate(dataframe, by=list(dataframe$date, dataframe$id), FUN=mean, na.rm=TRUE) 

res2 <- aggregate(dataframe, by=list(dataframe$date, dataframe$id), FUN=sum, na.rm=TRUE) 

然後

res <- cbind(res1,res2) 

現在資源包含均值和結果,你可以選擇wha你需要的專欄。