我希望能够通过多个列进行聚合,获得的结果不仅是最好的聚合(每个分组列中有一个值),而且还可以获得更高级别的聚合(来自一个分组列的一个值,对其他分组列没有限制,等等)。我相信Oracle和Hive可以通过“分组集”(也是Hive中的“多维数据集”和“汇总”)来实现这一点。
这段代码实现了我想要的结果:
rbind.fill(ddply(mtcars, .(cyl), summarize, agg=mean(mpg)),
ddply(mtcars, .(cyl, am), summarize, agg=mean(mpg)))[, c(1,3,2)]
cyl am agg
1 4 NA 26.66364
2 6 NA 19.74286
3 8 NA 15.10000
4 4 0 22.90000
5 4 1 28.07500
6 6 0 19.12500
7 6 1 20.56667
8 8 0 15.05000
9 8 1 15.40000
但这在几个方面是丑陋的。对于我的实际应用程序,要执行的聚合的定义很长,我真的不想重复它。有什么优雅的方法吗?
发布于 2014-01-26 17:15:59
我想这能做你想做的事:
library(plyr)
grp.cols <- c("vs", "am", "gear", "carb", "cyl")
do.call(
rbind.fill,
lapply(1:length(grp.cols), function(x) ddply(mtcars, grp.cols[1:x], summarize, agg=mean(mpg)))
)
https://stackoverflow.com/questions/21366138
复制相似问题