Странно: cumsum не работает на dplyr
Контекст: я хочу добавить столбец кумулятивной суммы в мой тибл с именем words_uni. Я использовал библиотеку (dplyr), функцию mutate. Я работаю с R версии 3.4.1 64 бит - Windows 10 и RStudio Версия 1.0.143
> head(words_uni)
# A tibble: 6 x 3
# Groups: Type [6]
Type Freq per
<chr> <int> <dbl>
1 the 937839 0.010725848
2 i 918552 0.010505267
3 to 788892 0.009022376
4 a 615082 0.007034551
Затем я сделал следующее:
> words_uni1 = words_uni %>%
mutate( acum= cumsum(per))
> head(words_uni1)
# A tibble: 6 x 4
# Groups: Type [6]
Type Freq per acum
<chr> <int> <dbl> <dbl>
1 the 937839 0.010725848 0.010725848
2 i 918552 0.010505267 0.010505267
3 to 788892 0.009022376 0.009022376
4 a 615082 0.007034551 0.007034551
Проблема: это не делает то, что я ожидал, и я не понимаю, почему.
Буду признателен за ваши комментарии. Заранее спасибо.
1 ответ
Вы должны предварительно сгруппировать тиббл по типу. Это вызывает ваше mutate
позвоните, чтобы рассчитать его по типу.
Вот некоторый воспроизводимый код:
require(readr)
require(dplyr)
x <- read_csv("type, freq, per
the, 937839, 0.010725848
i, 918552, 0.010505267
to, 788892, 0.009022376
a, 615082, 0.007034551")
### ungrouped tibble, desired results
x %>% mutate(acum = cumsum(per))
# A tibble: 4 x 4
type freq per acum
<chr> <int> <dbl> <dbl>
1 the 937839 0.010725848 0.01072585
2 i 918552 0.010505267 0.02123112
3 to 788892 0.009022376 0.03025349
4 a 615082 0.007034551 0.03728804
### grouped tibble
x %>% group_by(type) %>% mutate(acum = cumsum(per))
# A tibble: 4 x 4
# Groups: type [4]
type freq per acum
<chr> <int> <dbl> <dbl>
1 the 937839 0.010725848 0.010725848
2 i 918552 0.010505267 0.010505267
3 to 788892 0.009022376 0.009022376
4 a 615082 0.007034551 0.007034551
Вам нужно просто разгруппировать ваши данные.
word_uni %>% ungroup() %>% mutate(acum = cumsum(per))
Должен сделать свое дело.