Comment sélectionner les N premières valeurs par groupe dans R
Vous pouvez utiliser l’une des méthodes suivantes pour sélectionner les N premières valeurs par groupe dans R :
Méthode 1 : sélectionner les N premières valeurs par groupe (ignorer les égalités)
library(dplyr) #select top 5 values by group df %>% arrange(desc(values_column)) %>% group_by(group_column) %>% slice(1:5)
Méthode 2 : sélectionner les N premières valeurs par groupe (inclure les égalités)
library(dplyr) #select top 5 values by group df %>% group_by(group_column) %>% top_n(5, values_column)
Les exemples suivants montrent comment utiliser chaque méthode avec le bloc de données suivant dans R :
#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
points=c(19, 22, 15, NA, 14, 25, 25, 25),
rebounds=c(10, 6, 3, 7, 11, 13, 9, 12))
#view data frame
df
team points rebounds
1 A 19 10
2 A 22 6
3 A 15 3
4 A NA 7
5 B 14 11
6 B 25 13
7 B 25 9
8 B 25 12
Exemple 1 : sélectionner les N premières valeurs par groupe (ignorer les égalités)
Le code suivant montre comment sélectionner les 2 premières lignes avec les valeurs de points les plus élevées, regroupées par équipe :
library(dplyr) #select top 2 rows with highest points values, grouped by team df %>% arrange(desc(points)) %>% group_by(team) %>% slice(1:2) # A tibble: 4 x 3 # Groups: team [2] team points rebounds 1 A 22 6 2 A 19 10 3 B 25 13 4 B 25 9
Le résultat contient les deux lignes avec les valeurs de points les plus élevées pour chaque équipe.
Notez que pour l’équipe B, il y avait en fait trois lignes qui étaient à égalité pour la valeur de points la plus élevée ( 25 ), mais seules deux lignes sont renvoyées dans la sortie.
Cette méthode ignore simplement les liens.
Exemple 2 : sélectionner les N premières valeurs par groupe (inclure les égalités)
Le code suivant montre comment sélectionner les 2 premières lignes avec les valeurs de points les plus élevées, regroupées par équipe :
library(dplyr) #select top 2 rows with highest points values, grouped by team df %>% group_by(team) %>% top_n(2, points) # A tibble: 5 x 3 # Groups: team [2] team points rebounds 1 A 19 10 2 A 22 6 3 B 25 13 4 B 25 9 5 B 25 12
Le résultat contient les deux lignes avec les valeurs de points les plus élevées pour chaque équipe.
Notez que pour l’équipe B, trois lignes étaient à égalité pour la valeur de points la plus élevée ( 25 ), cette méthode incluait donc ces trois lignes dans le résultat final.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans R :
Comment sélectionner les lignes où la valeur apparaît dans n’importe quelle colonne de R
Comment sélectionner des colonnes spécifiques dans R
Comment sélectionner des colonnes par index dans R