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


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

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

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

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

library(dplyr)

df %>%
 group_by(col_to_group_by) %>%
 summarise_at (vars(col_to_aggregate), list(name = mean ))

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

library (data.table)

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

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

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

В следующем коде показано, как использовать функцию агрегата() из базы 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 mean points scored by team
aggregate(df$pts, list(df$team), FUN= mean )

 Group.1 x
1 a 6.50000
2 b 12.33333
3 c 7.00000

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

В следующем коде показано, как использовать функции group_by () и summarise_at() из пакета 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 mean points scored by team 
df %>%
 group_by(team) %>%
 summarise_at (vars(pts), list(name = mean ))

# A tibble: 3 x 2
 team name
 <fct> <dbl>
1 a 6.5
2 b 12.3
3 c 7

Метод 3: вычислить среднее значение по группе с использованием 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 mean points scored by team 
df[ ,list(mean= mean (pts)), by=team]

 team mean
1: a 6.50000
2: b 12.33333
3: c 7.00000

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

Связанный: Полное руководство по средней функции в R

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

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

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