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

Ajouter un commentaire

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