Как сделать cumum из 2 групп по dplyr? - PullRequest
0 голосов
/ 24 апреля 2018

Я написал следующий код:

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

Как мне изменить мой код, чтобы получить то, что мне нужно?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вы сгруппировали свои данные по item и choice.Чтобы получить совокупную сумму за 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
0 голосов
/ 24 апреля 2018

Похоже, вам просто нужно

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