Dplyr эквивалент суммы по разделу - PullRequest
0 голосов
/ 02 февраля 2019

Я уверен, что этот вопрос задавался ранее, но я не могу найти ответ.

Вот мои данные:

df <- data.frame(group=c("a","a","a","b","b","c"), value=c(1,2,3,4,5,7))
df
#>   group value
#> 1     a     1
#> 2     a     2
#> 3     a     3
#> 4     b     4
#> 5     b     5
#> 6     c     7

Я хотел бы третий столбец, которыйимеет сумму «значение» для каждой «группы», например:

#>   group value group_sum
#> 1     a     1         6
#> 2     a     2         6
#> 3     a     3         6
#> 4     b     4         9
#> 5     b     5         9
#> 6     c     7         7

Как я могу сделать это с помощью dplyr?

Ответы [ 4 ]

0 голосов
/ 03 февраля 2019

Никто не упомянул data.table пока:

library(data.table)

dat <- data.table(df)

dat[, `:=`(sums = sum(value)), group]

Что превращает dat в:

   group value sums
1:     a     1    6
2:     a     2    6
3:     a     3    6
4:     b     4    9
5:     b     5    9
6:     c     7    7
0 голосов
/ 02 февраля 2019

Я не знаю, как сделать это за один шаг, но

df_avg <- df %>% group_by(group) %>% summarize(group_sum=sum(value))  
df %>% full_join(df_avg,by="group")

работает.(Это в основном эквивалентно ответу @ KeqiangLi.)

ave(), из базы R, здесь также полезно:

df %>% mutate(group_sum=ave(value,group,FUN=sum))
0 голосов
/ 02 февраля 2019

Использование dplyr -

df %>%
    group_by(group) %>%
    mutate(group_sum = sum(value))
0 голосов
/ 02 февраля 2019
left_join(
  df,
  df %>% group_by(group) %>% summarise(group_sum = sum(value)),
  by = c("group")
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...