我有以下数据框:
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
然后,稍后我会在每个数据框中添加一个列,指出它是哪一个(3
,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
)和b1
它们都是一个数据帧。
必须有一种更简单/更清洁/更聪明的方法,但我无法想到任何事情。
答案 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)}))