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

标签 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

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

1) 我想要 bvalue 的平均值最大为 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) 我想要 bvalue 的平均值最大为 2,并按 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) 我想要 bvalue 的平均值最大为 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

然后,稍后我向每个数据帧添加一列,指示它是哪一个(b1b2b3)和 rbind 将它们全部合并到一个数据框中。

必须有一种更简单/更干净/更智能的方法来做到这一点,但我想不出任何东西。

最佳答案

包括 @jonathancardoso 对“多个”函数的评论

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

关于r - 使用 ddply 汇总不同范围列值的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28564437/

相关文章:

r - 如何将度数符号添加到 R 中的多个绘图图例条目?

r - rMarkdown 中是否可以有可排序(交互式)表格?

r - 使用 plyr - R 分块后从一列中获取具有最高值的行

r - 如何用中位数填充NA?

r - 如何在r中创建多折线图

r - R- `try`与捕获所有控制台输出一起使用吗?

r - 如何从环境中获取数据帧列表以供以后的 lapply() 魔法使用?

R - 如何做 Python 的 Try Except

根据多个条件替换 data.frame 上的值

r - 根据其他数据框更改列类