Comment trouver la valeur maximale par groupe dans R



Souvent, vous souhaiterez peut-être trouver la valeur maximale de chaque groupe dans un bloc de données dans R. Heureusement, cela est facile à faire en utilisant les fonctions du package dplyr .

Ce didacticiel explique comment procéder à l’aide du bloc de données suivant :

#create data frame
df <- data.frame(team = c('A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 position = c('G', 'F', 'F', 'G', 'G', 'G', 'F'),
                 points = c(12, 15, 19, 22, 34, 34, 39))

#view data frame
df

  team position points
1    A        G     12
2    A        F     15
3    A        F     19
4    B        G     22
5    B        G     34
6    B        G     34
7    B        F     39

Exemple 1 : Trouver la valeur maximale par groupe

Le code suivant montre comment trouver la valeur maximale par équipe et par position :

library(dplyr)

#find max value by team and position
df %>%
  group_by(team, position) %>%
  summarise(max = max(points, na.rm=TRUE))

# A tibble: 4 x 3
# Groups:   team [?]
  team   position   max
      
1 A      F         19.0
2 A      G         12.0
3 B      F         39.0
4 B      G         34.0

Exemple 2 : renvoyer les lignes contenant la valeur maximale par groupe

Le code suivant montre comment renvoyer les lignes contenant la valeur maximale par équipe et par poste :

library(dplyr)

#find rows that contain max points by team and position
df %>%
  group_by(team, position) %>%
  filter(points == max(points, na.rm=TRUE))

# A tibble: 5 x 3
# Groups:   team, position [4]
  team   position points
       
1 A      G          12.0
2 A      F          19.0
3 B      G          34.0
4 B      G          34.0
5 B      F          39.0

Exemple 3 : renvoyer une seule ligne contenant la valeur maximale par groupe

Dans l’exemple précédent, il y avait deux joueurs qui avaient le nombre maximum de points dans l’équipe A et qui étaient tous deux en position G. Si vous souhaitez uniquement renvoyer le premier joueur avec la valeur maximale dans un groupe, vous pouvez utiliser la fonction slice(). fonctionner comme suit :

library(dplyr)

#find rows that contain max points by team and position
df %>%
  group_by(team, position) %>%
  slice(which.max(points))

# A tibble: 4 x 3
# Groups:   team, position [4]
  team   position points
       
1 A      F          19.0
2 A      G          12.0
3 B      F          39.0
4 B      G          34.0

Ressources additionnelles

Le guide complet : Comment regrouper et résumer des données dans R
Comment filtrer les lignes dans R
Comment supprimer les lignes en double dans R

Ajouter un commentaire

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