如何用dplyr做2组的cumsum?

时间:2018-04-24 14:54:38

标签: r dplyr cumsum

我写了以下代码:

<input type="button" [disabled]="newForm.invalid" />

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

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

我写道:

  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))

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

2 个答案:

答案 0 :(得分:2)

看起来你只需要

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

答案 1 :(得分:1)

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

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

这将返回:

# 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