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


Существует два основных способа расчета сводной статистики по группам в R:

Способ 1: используйте tapply() из Base R

tapply(df$value_col, df$group_col, summary)

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

library(dplyr)

df %>%
 group_by(group_col) %>% 
 summarize(min = min(value_col),
 q1 = quantile(value_col, 0.25 ),
 median = median(value_col),
 mean = mean(value_col),
 q3 = quantile(value_col, 0.75 ),
 max = max(value_col))

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

Способ 1: используйте tapply() из Base R

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

#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
 points=c(99, 68, 86, 88, 95, 74, 78, 93),
 assists=c(22, 28, 31, 35, 34, 45, 28, 31),
 rebounds=c(30, 28, 24, 24, 30, 36, 30, 29))

#calculate summary statistics of 'points' grouped by 'team'
tapply(df$points, df$team, summary)

$A
 Min. 1st Qu. Median Mean 3rd Qu. Max.
 68.00 81.50 87.00 85.25 90.75 99.00 

$B
 Min. 1st Qu. Median Mean 3rd Qu. Max.
 74.0 77.0 85.5 85.0 93.5 95.0

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

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

library(dplyr)

#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
 points=c(99, 68, 86, 88, 95, 74, 78, 93),
 assists=c(22, 28, 31, 35, 34, 45, 28, 31),
 rebounds=c(30, 28, 24, 24, 30, 36, 30, 29))

#calculate summary statistics of 'points' grouped by 'team'
df %>%
 group_by(team) %>% 
 summarize(min = min(points),
 q1 = quantile(points, 0.25 ),
 median = median(points),
 mean = mean(points),
 q3 = quantile(points, 0.75 ),
 max = max(points))

# A tibble: 2 x 7
 team min q1 median mean q3 max

1 A 68 81.5 87 85.2 90.8 99
2 B 74 77 85.5 85 93.5 95

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

Стоит отметить, что подход dplyr, вероятно, будет быстрее для больших фреймов данных, но оба метода будут одинаково работать с меньшими фреймами данных.

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

В следующих руководствах объясняется, как выполнять другие распространенные функции группировки в R:

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

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