使用 ddply 汇总不同列值范围的数据

Use ddply to summarize data for different ranges of column values

我有以下数据框:

structure(list(a = c(0, 0, 0, 0.05, 0.05, 0.05, 0.1, 0.1, 0.1
), b = c(1, 2, 3, 1, 2, 3, 1, 2, 3), value = c(0.638197756838053, 
0.655913984635845, 0.261592486174777, 0.442856104113162, 0.993114325450733, 
0.610009586671367, 0.573423251975328, 0.44579351413995, 0.0946824024431407
)), 
.Names = c("a", "b", "value"), row.names = c(NA, -9L), class = "data.frame")

结果

     a b     value
1 0.00 1 0.6381978
2 0.00 2 0.6559140
3 0.00 3 0.2615925
4 0.05 1 0.4428561
5 0.05 2 0.9931143
6 0.05 3 0.6100096
7 0.10 1 0.5734233
8 0.10 2 0.4457935
9 0.10 3 0.0946824

我想在 单个数据帧 中为 b 的不同范围生成 value 的平均值。我天真地和手动地这样做:

1) 我想要 valueb1 的平均值,按 a:

分组
> b1 <- ddply(subset(result, b==1),.(a),summarize,meanValue = mean(value))
> b1
     a meanValue
1 0.00 0.6381978
2 0.05 0.4428561
3 0.10 0.5734233

2) 我想要 b2value 的平均值,按 a:

分组
> b2 <- ddply(subset(result, b<=2),.(a),summarize,meanValue = mean(value))
> b2
     a meanValue
1 0.00 0.6470559
2 0.05 0.7179852
3 0.10 0.5096084

3) 我想要 b3value 的平均值,按 a:

分组
> b3 <- ddply(subset(result, b<=3),.(a),summarize,meanValue = mean(value))
> b3
     a meanValue
1 0.00 0.5185681
2 0.05 0.6819933
3 0.10 0.3712997

然后,稍后我向每个数据框添加一列,指示它是哪一列(b1b2b3),然后 rbind 将它们全部放入一个单个数据框。

肯定有 simpler/cleaner/smarter 方法可以做到这一点,但我想不出任何方法。

包括@jonathancardoso 对"multiple" 函数的评论

library(plyr)
res <- do.call(rbind,lapply(unique(result$b), function(x) {
          x1 <- subset(result, b<=x)
          cbind(ddply(x1, .(a), summarise,
               meanValue=mean(value)),maxB=x)}))