Comment sélectionner la première ligne par groupe à l’aide de dplyr
Souvent, vous souhaiterez peut-être sélectionner la première ligne de chaque groupe à l’aide du package dplyr dans R. Vous pouvez utiliser la syntaxe de base suivante pour ce faire :
df %>% group_by(group_var) %>% arrange(values_var) %>% filter(row_number()==1)
L’exemple suivant montre comment utiliser cette fonction dans la pratique.
Exemple : sélectionnez la première ligne par groupe dans R
Supposons que nous ayons l’ensemble de données suivant dans R :
#create dataset df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C'), points=c(4, 9, 7, 7, 6, 13, 8, 8, 4, 17)) #view dataset df team points 1 A 4 2 A 9 3 A 7 4 B 7 5 B 6 6 B 13 7 C 8 8 C 8 9 C 4 10 C 17
Le code suivant montre comment utiliser le package dplyr pour sélectionner la première ligne par groupe dans R :
library(dplyr) df %>% group_by(team) %>% arrange(points) %>% filter(row_number()==1) # A tibble: 3 x 2 # Groups: team [3] team points 1 A 4 2 C 4 3 B 6
Par défaut, arrange() trie les valeurs par ordre croissant mais nous pouvons facilement trier les valeurs par ordre décroissant :
df %>% group_by(team) %>% arrange(desc(points)) %>% filter(row_number()==1) # A tibble: 3 x 2 # Groups: team [3] team points 1 C 17 2 B 13 3 A 9
Notez que vous pouvez facilement modifier ce code pour sélectionner la n ème ligne de chaque groupe. Changez simplement row_number() == n .
Par exemple, si vous souhaitez sélectionner la 2ème ligne par groupe, vous pouvez utiliser la syntaxe suivante :
df %>% group_by(team) %>% arrange(desc(points)) %>% filter(row_number()==2)
Ou vous pouvez utiliser la syntaxe suivante pour sélectionner la dernière ligne par groupe :
df %>% group_by(team) %>% arrange(desc(points)) %>% filter(row_number()==n())
Ressources additionnelles
Comment organiser les lignes dans R
Comment compter les observations par groupe dans R
Comment trouver la valeur maximale par groupe dans R