r - 累积分组
问题描述
我有以下数据框:
df = data.frame(a = c(1,1,3,2,2), b=6:10)
## a b
## 1 6
## 1 7
## 3 3
## 2 9
## 2 10
我想按组分析数据(a 是分组参数),但不是通常的(例如,每个值指定一组行,并且组是不相交的)我需要“累积组”。也就是说,对于 a=i 的值,该组应该包含 a<=i 的所有行。这些不是不相交的组,但我仍然想分别总结每个组。
因此,例如,如果对于每个组我想要 b 的平均值,结果将是:
## a mean_b
## 1 6.5
## 2 8
## 3 7
请注意,在这个简化示例背后的真实场景中,我不能单独分析不相交的组,然后聚合相关组。summarise 函数必须“知道”该组中的所有行才能执行计算。
所以当然,我可以使用一些应用函数并以旧的方式计算事物,并从中创建一个新的 df,但我会寻找类似 dplyr/tidyverse 的函数来做到这一点。
有什么建议么?
解决方案
这样的事情怎么样?
library(dplyr)
df %>%
arrange(a) %>%
group_by(a) %>%
summarise(sum_b = sum(b)) %>%
ungroup() %>%
mutate(sum_b = cumsum(sum_b))
# a sum_b
# <dbl> <int>
#1 1. 13
#2 2. 32
#3 3. 40
我们sum
按组 ( a
) 取,然后将累积总和加上下一组中该组的前一个值。
推荐阅读
- unity3d - 代理从它下面的 navmesh 上的 navmesh 掉下来
- php - Laravel Eloquent 关系 多对多
- python - Pygame 填充和 blit 不编辑屏幕
- python - 存储在图像中的像素值会自动更改。如果图像再次在另一个函数中打开
- facebook - Facebook Instant Articles HTML POST 错误
- python - 在一系列时间索引上绘制 DataFrame
- sql - 使用 createCriteria 的 Grails 子查询
- javascript - 在 textarea 中将结果显示为日志
- r - How to find the minimum and maximum in many rows per single value
- docker - Docker 中的 Dart 原生扩展