Comment regrouper par toutes les colonnes sauf une dans dplyr
Vous pouvez utiliser la syntaxe de base suivante pour regrouper toutes les colonnes sauf une dans un bloc de données à l’aide du package dplyr dans R :
df %>%
group_by(across(c(-this_column)))
Cet exemple particulier regroupe le bloc de données par toutes les colonnes sauf celle appelée this_column .
Notez que le signe négatif ( – ) dans la formule indique à dplyr d’exclure cette colonne particulière dans la fonction group_by() .
L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.
Exemple : regrouper par toutes les colonnes sauf une dans dplyr
Supposons que nous ayons le bloc de données suivant dans R qui contient des informations sur divers joueurs de basket-ball :
#create data frame df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'), starter=c('Y', 'Y', 'Y', 'N', 'Y', 'N', 'N', 'N'), points=c(99, 104, 119, 113)) #view data frame df team position starter points 1 A G Y 99 2 A G Y 104 3 A F Y 119 4 A F N 113 5 B G Y 99 6 B G N 104 7 B F N 119 8 B F N 113
Supposons maintenant que nous souhaitions trouver la valeur maximale dans la colonne des points , regroupée dans toutes les autres colonnes du bloc de données.
Nous pouvons utiliser la syntaxe suivante pour ce faire :
library(dplyr) #group by all columns except points column and find max points df %>% group_by(across(c(-points))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 A G Y 99 104 2 A G Y 104 104 3 A F Y 119 119 4 A F N 113 113 5 B G Y 99 99 6 B G N 104 104 7 B F N 119 119 8 B F N 113 119
À partir du résultat, nous pouvons voir :
- La valeur maximale de points pour tous les joueurs ayant une valeur d’équipe de A, une valeur de position de G et une valeur de départ de Y était de 104 .
- La valeur maximale de points pour tous les joueurs ayant une valeur d’équipe de A, une valeur de position de F et une valeur de départ de Y était de 119 .
- La valeur maximale de points pour tous les joueurs ayant une valeur d’équipe de A, une valeur de position de F et une valeur de départ de N était de 113 .
Et ainsi de suite.
Notez que nous pourrions également obtenir le même résultat si nous tapions chaque nom de colonne, à l’exception des points dans la fonction group_by() :
library(dplyr) #group by all columns except points column and find max points df %>% group_by(across(c(team, position, starter))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 A G Y 99 104 2 A G Y 104 104 3 A F Y 119 119 4 A F N 113 113 5 B G Y 99 99 6 B G N 104 104 7 B F N 119 119 8 B F N 113 119
Cela correspond au résultat de l’exemple précédent.
Cependant, notez qu’il est beaucoup plus facile d’exclure la colonne de points dans la fonction group_by() plutôt que de taper le nom de toutes les autres colonnes.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes à l’aide de dplyr :
Comment filtrer les lignes contenant une certaine chaîne à l’aide de dplyr
Comment calculer les fréquences relatives à l’aide de dplyr
Comment sélectionner la première ligne par groupe à l’aide de dplyr