使用 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) 我想要 value
的 b
到 1
的平均值,按 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) 我想要 b
到 2
的 value
的平均值,按 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) 我想要 b
到 3
的 value
的平均值,按 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
、b2
或 b3
),然后 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)}))
我有以下数据框:
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) 我想要 value
的 b
到 1
的平均值,按 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) 我想要 b
到 2
的 value
的平均值,按 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) 我想要 b
到 3
的 value
的平均值,按 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
、b2
或 b3
),然后 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)}))