首页 > 解决方案 > 正确计算组内的累积值

问题描述

我希望任何人都可以帮助解决这个问题。我有一个类似的数据框:

test <- data.frame(ID = c(1:24),
                  group = rep(c(1,1,1,1,1,1,2,2,2,2,2,2),2),
                  year1 = rep(c(2018,2018,2018,2019,2019,2019),4),
                  month1 = rep(c(1,2,3),8))

现在我想为每组做一个 cumsum,但是当我使用以下代码时,sumsum 每年都会“重新开始”。

test2 <-test %>% 
  group_by(group,year1,month1) %>% 
  summarise(a = length(unique(ID)))  %>%
  mutate(a = cumsum(a))

我想要的输出是:

   group year1 month1  a
1      1  2018      1  2
2      1  2018      2  4
3      1  2018      3  6
4      1  2019      1  8
5      1  2019      2 10
6      1  2019      3 12
7      2  2018      1  2
8      2  2018      2  4
9      2  2018      3  6
10     2  2019      1  8
11     2  2019      2 10
12     2  2019      3 12

标签: rcumsum

解决方案


ID您可以先为每个计算唯一的groupmonth然后为每个计算它。yearcumsumgroup

library(dplyr)

test %>%
  group_by(group, year1, month1) %>%
  summarise(a = n_distinct(ID)) %>%
  group_by(group) %>%
  mutate(a = cumsum(a)) 

#   group year1 month1     a
#   <dbl> <dbl>  <dbl> <int>
# 1     1  2018      1     2
# 2     1  2018      2     4
# 3     1  2018      3     6
# 4     1  2019      1     8
# 5     1  2019      2    10
# 6     1  2019      3    12
# 7     2  2018      1     2
# 8     2  2018      2     4
# 9     2  2018      3     6
#10     2  2019      1     8
#11     2  2019      2    10
#12     2  2019      3    12

推荐阅读