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