Comment classer les variables par groupe à l’aide de dplyr
Vous pouvez utiliser la syntaxe de base suivante pour classer les variables par groupe dans dplyr :
df %>% arrange(group_var, numeric_var) %>% group_by(group_var) %>% mutate(rank = rank(numeric_var))
Les exemples suivants montrent comment utiliser cette syntaxe en pratique avec le bloc de données suivant :
#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
Exemple 1 : Classement par ordre croissant
Le code suivant montre comment classer les points marqués par les joueurs par ordre croissant, regroupés par équipe :
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
Exemple 2 : Classement par ordre décroissant
On peut également classer les points marqués par ordre décroissant par groupe, en utilisant un signe négatif au sein de la fonction 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
Comment gérer les égalités dans le classement
Nous pouvons utiliser l’argument tie.method pour spécifier comment nous devons gérer les égalités lors du classement des valeurs numériques.
rank(points, ties.method='average')
Vous pouvez utiliser l’une des options suivantes pour spécifier comment gérer les liens :
- moyenne : (Par défaut) Attribue à chaque élément lié le rang moyen (les éléments classés en 3ème et 4ème position recevraient tous deux un rang de 3,5)
- premier : Attribue le premier élément lié au rang le plus bas (les éléments classés en 3ème et 4ème positions recevraient respectivement les rangs 3 et 4)
- min : Assigne chaque élément lié au rang le plus bas (les éléments classés en 3ème et 4ème position recevraient tous deux un rang de 3)
- max : Attribue à chaque élément lié le rang le plus élevé (les éléments classés en 3ème et 4ème position recevraient tous deux un rang de 4)
- aléatoire : attribue à chaque élément à égalité un rang aléatoire (l’un ou l’autre des éléments à égalité pour la 3ème et la 4ème position pourrait recevoir l’un ou l’autre rang)
Ressources additionnelles
Les didacticiels suivants expliquent comment exécuter d’autres fonctions courantes dans dplyr :
Comment sélectionner la première ligne par groupe à l’aide de dplyr
Comment calculer les fréquences relatives à l’aide de dplyr
Comment recoder des valeurs à l’aide de dplyr
Comment remplacer NA par Zero dans dplyr