2014-09-25 68 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你需要的专栏。