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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *