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


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

df %>% arrange (group_var, numeric_var) %>%
 group_by(group_var) %>% 
 mutate (rank = rank(numeric_var))

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

#create data frame
df <- data.frame(team = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'),
 points = c(12, 28, 19, 22, 32, 45, 22, 28, 13, 19),
 rebounds = c(5, 7, 7, 12, 11, 4, 10, 7, 8, 8))

#view data frame
df

 team points rebounds
1 A 12 5
2 A 28 7
3 A 19 7
4 A 22 12
5 B 32 11
6 B 45 4
7 B 22 10
8 C 28 7
9 C 13 8
10 C 19 8

Пример 1: Ранг в порядке возрастания

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

library(dplyr)

#rank points scored, grouped by team
df %>% arrange (team, points) %>%
 group_by(team) %>% 
 mutate (rank = rank(points))

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

 1 A 12 5 1
 2 A 19 7 2
 3 A 22 12 3
 4 A 28 7 4
 5 B 22 10 1
 6 B 32 11 2
 7 B 45 4 3
 8 C 13 8 1
 9 C 19 8 2
10 C 28 7 3

Пример 2: Ранг в порядке убывания

Мы также можем ранжировать набранные очки в порядке убывания по группам, используя отрицательный знак в функции rank() :

library(dplyr)

#rank points scored in reverse, grouped by team
df %>% arrange (team, points) %>%
 group_by(team) %>% 
 mutate (rank = rank(-points))

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

 1 A 12 5 4
 2 A 19 7 3
 3 A 22 12 2
 4 A 28 7 1
 5 B 22 10 3
 6 B 32 11 2
 7 B 45 4 1
 8 C 13 8 3
 9 C 19 8 2
10 C 28 7 1

Как справляться с ничьей в рейтинге

Мы можем использовать аргумент ties.method , чтобы указать, как мы должны обрабатывать ничьи при ранжировании числовых значений.

rank(points, ties. method ='average')

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

  • среднее : (по умолчанию) присваивает каждому связанному элементу средний ранг (элементы, занимающие 3-ю и 4-ю позицию, получат ранг 3,5).
  • first : присваивает первому связанному элементу самый низкий ранг (элементы, занимающие 3-ю и 4-ю позиции, получат ранги 3 и 4 соответственно)
  • min : присваивает каждому связанному элементу самый низкий ранг (элементы, занимающие 3-ю и 4-ю позицию, получат ранг 3).
  • max : присваивает каждому связанному элементу наивысший ранг (элементы, занимающие 3-ю и 4-ю позицию, получат ранг 4)
  • random : присваивает каждому связанному элементу случайный ранг (любой элемент, связанный с 3-й и 4-й позицией, может получить любой ранг)

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

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

Как выбрать первую строку по группе с помощью dplyr
Как рассчитать относительные частоты с помощью dplyr
Как перекодировать значения с помощью dplyr
Как заменить NA на ноль в dplyr

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