Как рассчитать сводную статистику по группам в 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