首页 > 解决方案 > 累积分组

问题描述

我有以下数据框:

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 的函数来做到这一点。

有什么建议么?

标签: rdplyrgroupingtidyversecumulative-sum

解决方案


这样的事情怎么样?

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) 取,然后将累积总和加上下一组中该组的前一个值。


推荐阅读