如何通过 dplyr 做 2 组的 cumsum?

How to do cumsum of 2 groups by dplyr?

我写了下面的代码:

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

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

看来你刚好需要

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

您已按 itemchoice 对数据进行了分组。为了获得每个 item 的累计总和,只需在汇总数据后按 item 对其进行分组:

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

这将 return:

# A tibble: 8 x 4
# Groups:   item [2]
  item  choice     n   cum
  <fct>  <int> <int> <int>
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