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


Часто вам может понадобиться найти максимальное значение каждой группы во фрейме данных в R. К счастью, это легко сделать с помощью функций из пакета dplyr .

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

#create data frame
df <- data.frame(team = c('A', 'A', 'A', 'B', 'B', 'B', 'B'),
 position = c('G', 'F', 'F', 'G', 'G', 'G', 'F'),
 points = c(12, 15, 19, 22, 34, 34, 39))

#view data frame
df

 team position points
1 A G 12
2 A F 15
3 A F 19
4 B G 22
5 B G 34
6 B G 34
7 B F 39

Пример 1: найти максимальное значение по группе

Следующий код показывает, как найти максимальное значение по команде и положению:

library(dplyr)

#find max value by team and position
df %>%
 group_by(team, position) %>%
 summarise (max = max(points, na.rm= TRUE ))

# A tibble: 4 x 3
# Groups: team [?]
 team position max

1 A F 19.0
2 A G 12.0
3 B F 39.0
4 B G 34.0

Пример 2. Возврат строк, содержащих максимальное значение по группе

В следующем коде показано, как вернуть строки, содержащие максимальное значение по команде и положению:

library(dplyr)

#find rows that contain max points by team and position
df %>%
 group_by(team, position) %>%
 filter (points == max(points, na.rm= TRUE ))

# A tibble: 5 x 3
# Groups: team, position [4]
 team position points

1 A G 12.0
2 A F 19.0
3 B G 34.0
4 B G 34.0
5 B F 39.0

Пример 3. Возврат одной строки, содержащей максимальное значение по группе

В предыдущем примере было два игрока с максимальным количеством очков в команде A, которые оба были в позиции G. Если вы хотите вернуть только первого игрока с максимальным значением в группе, вы можете использовать slice() функционируют следующим образом:

library(dplyr)

#find rows that contain max points by team and position
df %>%
 group_by(team, position) %>%
 slice (which.max(points))

# A tibble: 4 x 3
# Groups: team, position [4]
 team position points

1 A F 19.0
2 A G 12.0
3 B F 39.0
4 B G 34.0

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

Полное руководство: как группировать и суммировать данные в R
Как фильтровать строки в R
Как удалить повторяющиеся строки в R