Как выбрать первые N значений по группе в R


Вы можете использовать один из следующих методов, чтобы выбрать первые N значений по группам в R:

Метод 1: выберите N лучших значений по группам (игнорировать совпадения)

library(dplyr)

#select top 5 values by group
df %>% 
 arrange(desc(values_column)) %>% 
 group_by(group_column) %>%
 slice(1:5)

Метод 2: выберите первые N значений по группам (включая совпадения)

library(dplyr)

#select top 5 values by group
df %>%
 group_by(group_column) %>%
 top_n(5, values_column)

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

#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
 points=c(19, 22, 15, NA, 14, 25, 25, 25),
 rebounds=c(10, 6, 3, 7, 11, 13, 9, 12))

#view data frame
df

 team points rebounds
1 A 19 10
2 A 22 6
3 A 15 3
4 A NA 7
5 B 14 11
6 B 25 13
7 B 25 9
8 B 25 12

Пример 1. Выбор первых N значений по группам (игнорировать совпадения)

В следующем коде показано, как выбрать две верхние строки с наибольшим количеством баллов, сгруппированные по командам:

library(dplyr)

#select top 2 rows with highest points values, grouped by team 
df %>% 
 arrange(desc(points)) %>% 
 group_by(team) %>%
 slice(1:2)

# A tibble: 4 x 3
# Groups: team [2]
 team points rebounds

1 A 22 6
2 A 19 10
3 B 25 13
4 B 25 9

Выходные данные содержат две строки с наибольшим количеством очков для каждой команды.

Обратите внимание, что для команды B на самом деле было три строки, которые были привязаны к наивысшему значению очков ( 25 ), но в выходных данных возвращаются только две строки.

Этот метод просто игнорирует связи.

Пример 2. Выбор первых N значений по группам (включая совпадения)

В следующем коде показано, как выбрать две верхние строки с наибольшим количеством баллов, сгруппированные по командам:

library(dplyr)

#select top 2 rows with highest points values, grouped by team 
df %>%
 group_by(team) %>%
 top_n(2, points)

# A tibble: 5 x 3
# Groups: team [2]
 team points rebounds

1 A 19 10
2 A 22 6
3 B 25 13
4 B 25 9
5 B 25 12

Выходные данные содержат две строки с наибольшим количеством очков для каждой команды.

Обратите внимание, что для команды B было три строки с одинаковым наивысшим значением очков ( 25 ), поэтому этот метод включал все три из этих строк в окончательный результат.

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

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

Как выбрать строки, в которых значение появляется в любом столбце в R
Как выбрать определенные столбцы в R
Как выбрать столбцы по индексу в R

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