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

时间:2015-02-17 15:03:24

标签: r plyr

我有以下数据框:

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

我想在单个数据框中为value的不同范围生成b的均值。我正在天真地这样做,并且像这样:

1)我希望value的{​​{1}}的平均值最高为b,按1分组:

a

2)我希望> 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 的{​​{1}}的平均值最高为value,按b分组:

2

3)我希望a的{​​{1}}的平均值最高为> 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 ,按value分组:

b

然后,稍后我会在每个数据框中添加一个列,指出它是哪一个(3a> 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 )和b1它们都是一个数据帧。

必须有一种更简单/更清洁/更聪明的方法,但我无法想到任何事情。

1 个答案:

答案 0 :(得分:2)

包括来自@jonathancardoso的评论&#34; multiple&#34;功能

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)}))