首页 > 解决方案 > 如何通过 dplyr 进行 2 组的 cumsum?

问题描述

我写了以下代码:

set.seed(20)
dat <- data.frame(item=c(rep("i1", 10), rep("i2", 10)),
                  choice=c(sample(1:4, 20, replace = TRUE)))

我需要通过 2 项获得每个选择的累积总和:

  item  choice     n     cumsum  
1 i1         1     2          2
2 i1         2     3          5
3 i1         3     1          6
4 i1         4     4         10
5 i2         1     3          3
6 i2         2     3          6
7 i2         3     2          8
8 i2         4     2         10

我写:

dat %>% 
  group_by(item, choice) %>% 
  count() %>% 
  mutate(n) %>%
  mutate(cum=cumsum(n))

并得到:

  item  choice     n   cum
  <fct>  <int> <int> <int>
1 i1         1     2     2
2 i1         2     3     3
3 i1         3     1     1
4 i1         4     4     4
5 i2         1     3     3
6 i2         2     3     3
7 i2         3     2     2
8 i2         4     2     2

我应该如何修改我的代码以获得我需要的东西?

标签: rdplyrcumsum

解决方案


看起来你只需要

dat %>% 
  group_by(item, choice) %>% 
  summarize(n=n()) %>% 
  mutate(cum = cumsum(n))

推荐阅读