Как выбрать первую строку по группе с помощью dplyr


Часто вам может понадобиться выбрать первую строку в каждой группе с помощью пакета dplyr в R. Для этого можно использовать следующий базовый синтаксис:

df %>%
 group_by(group_var) %>%
 arrange (values_var) %>%
 filter (row_number()== 1 )

В следующем примере показано, как использовать эту функцию на практике.

Пример: выберите первую строку по группе в R

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

#create dataset
df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C'),
 points=c(4, 9, 7, 7, 6, 13, 8, 8, 4, 17))

#view dataset
df

 team points
1 A 4
2 A 9
3 A 7
4 B 7
5 B 6
6 B 13
7 C 8
8 C 8
9 C 4
10 C 17

В следующем коде показано, как использовать пакет dplyr для выбора первой строки по группе в R:

library(dplyr)

df %>%
 group_by(team) %>%
 arrange (points) %>%
 filter (row_number()== 1 )

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

1 A 4
2 C 4
3 B 6

По умолчанию упорядочить() сортирует значения в порядке возрастания, но вместо этого мы можем легко отсортировать значения в порядке убывания:

df %>%
 group_by(team) %>%
 arrange ( desc (points)) %>%
 filter (row_number()== 1 )

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

1 C 17
2 B 13
3 A 9

Обратите внимание, что вы можете легко изменить этот код, чтобы выбрать n -ю строку для каждой группы. Просто измените row_number() == n .

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

df %>%
 group_by(team) %>%
 arrange ( desc (points)) %>%
 filter (row_number()== 2 )

Или вы можете использовать следующий синтаксис для выбора последней строки по группе:

df %>%
 group_by(team) %>%
 arrange ( desc (points)) %>%
 filter (row_number()== n() )

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

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

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