Вы можете использовать один из следующих методов, чтобы выбрать первые 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