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

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