Как рассчитать сумму по группе в R (с примерами)


Часто вам может понадобиться вычислить сумму по группе в R. Для этого можно использовать три метода:

Способ 1: Используйте базу R.

aggregate(df$col_to_aggregate, list(df$col_to_group_by), FUN= sum ) 

Способ 2: Используйте пакет dplyr().

library(dplyr)

df %>%
 group_by(col_to_group_by) %>%
 summarise (Freq = sum (col_to_aggregate))

Способ 3. Используйте пакет data.table.

library (data.table)

dt[ ,list(sum= sum (col_to_aggregate)), by=col_to_group_by]

В следующих примерах показано, как использовать каждый из этих методов на практике.

Метод 1: вычислить сумму по группе с использованием базы R

В следующем коде показано, как использовать функциюaggregation() из базы R для вычисления суммы очков, набранных командой, в следующем фрейме данных:

#create data frame
df <- data.frame(team=c('a', 'a', 'b', 'b', 'b', 'c', 'c'),
 pts=c(5, 8, 14, 18, 5, 7, 7),
 rebs=c(8, 8, 9, 3, 8, 7, 4))

#view data frame
df

 team pts rebs
1 a 5 8
2 a 8 8
3 b 14 9
4 b 18 3
5 b 5 8
6 c 7 7
7 c 7 4

#find sum of points scored by team
aggregate(df$pts, list(df$team), FUN= sum )

 Group.1 x
1 a 13
2 b 37
3 c 14

Метод 2: вычислить сумму по группе с помощью dplyr

В следующем коде показано, как использовать функции group_by() и summarise() из пакета dplyr для вычисления суммы очков, набранных командой, в следующем фрейме данных:

library(dplyr) 

#create data frame
df <- data.frame(team=c('a', 'a', 'b', 'b', 'b', 'c', 'c'),
 pts=c(5, 8, 14, 18, 5, 7, 7),
 rebs=c(8, 8, 9, 3, 8, 7, 4))

#find sum of points scored by team 
df %>%
 group_by(team) %>%
 summarise (Freq = sum (pts))

# A tibble: 3 x 2
 team Freq
 <chr> <dbl>
1 a 13
2 b 37
3 c 14

Способ 3: вычислить сумму по группе, используя data.table

В следующем коде показано, как использовать пакет data.table для расчета суммы очков, набранных командой в следующем фрейме данных:

library (data.table) 

#create data frame
df <- data.frame(team=c('a', 'a', 'b', 'b', 'b', 'c', 'c'),
 pts=c(5, 8, 14, 18, 5, 7, 7),
 rebs=c(8, 8, 9, 3, 8, 7, 4))

#convert data frame to data table 
setDT(df)

#find sum of points scored by team 
df[ ,list(sum= sum (pts)), by=team]

 team sum
1: a 13
2: b 37
3: c 14

Обратите внимание, что все три метода возвращают одинаковые результаты.

Примечание. Если у вас очень большой набор данных, метод data.table будет работать быстрее всех трех перечисленных здесь методов.

Дополнительные ресурсы

Как рассчитать среднее значение по группе в R
Как рассчитать квантили по группам в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.