Comment utiliser case_when() dans dplyr



La fonction case_when() du package dplyr dans R peut être utilisée pour créer de nouvelles variables à partir de variables existantes.

Cette fonction utilise la syntaxe de base suivante :

library(dplyr)

df %>%
  mutate(new_var = case_when(var1 < 15 ~ 'low',
                             var2 < 25 ~ 'med',
                             TRUE ~ 'high'))

Notez que TRUE est équivalent à une instruction « else ».

Les exemples suivants montrent comment utiliser cette fonction en pratique avec le bloc de données suivant :

#create data frame
df <- data.frame(player = c('AJ', 'Bob', 'Chad', 'Dan', 'Eric', 'Frank'),
                 position = c('G', 'F', 'F', 'G', 'C', NA),
                 points = c(12, 15, 19, 22, 32, NA),
                 assists = c(5, 7, 7, 12, 11, NA))

#view data frame
df

  player position points assists
1     AJ        G     12       5
2    Bob        F     15       7
3   Chad        F     19       7
4    Dan        G     22      12
5   Eric        C     32      11
6  Frank       NA     NA      NA

Exemple 1 : Créer une nouvelle variable à partir d’une variable existante

Le code suivant montre comment créer une nouvelle variable appelée qualité dont les valeurs sont dérivées de la colonne de points :

df %>%
  mutate(quality = case_when(points > 20 ~ 'high',
                             points > 15 ~ 'med',
                             TRUE ~ 'low' ))

  player position points assists quality
1     AJ        G     12       5     low
2    Bob        F     15       7     low
3   Chad        F     19       7     med
4    Dan        G     22      12    high
5   Eric        C     32      11    high
6  Frank       NA     NA      NA     low

Voici exactement comment la fonction case_when() a créé les valeurs de la nouvelle colonne :

  • Si la valeur dans la colonne points est supérieure à 20, alors la valeur dans la colonne qualité est « élevée ».
  • Sinon, si la valeur dans la colonne points est supérieure à 15, alors la valeur dans la colonne qualité est « med ».
  • Sinon, si la valeur dans la colonne points est inférieure ou égale à 15 (ou une valeur manquante comme NA), alors la valeur dans la colonne qualité est « faible ».

Exemple 2 : Créer une nouvelle variable à partir de plusieurs variables

Le code suivant montre comment créer une nouvelle variable appelée qualité dont les valeurs sont dérivées des colonnes de points et d’assistance :

df %>%
  mutate(quality = case_when(points > 15 & assists > 10 ~ 'great',
                             points > 15 & assists > 5 ~ 'good',
                             TRUE ~ 'average' ))

  player position points assists quality
1     AJ        G     12       5 average
2    Bob        F     15       7 average
3   Chad        F     19       7    good
4    Dan        G     22      12   great
5   Eric        C     32      11   great
6  Frank       NA     NA      NA average

Notez que nous pouvons également utiliser la fonction is.na() pour attribuer explicitement des chaînes aux valeurs NA :

df %>%
  mutate(quality = case_when(is.na(points) ~ 'missing',
                             points > 15 & assists > 10 ~ 'great',
                             points > 15 & assists > 5 ~ 'good',
                             TRUE ~ 'average' ))

  player position points assists quality
1     AJ        G     12       5 average
2    Bob        F     15       7 average
3   Chad        F     19       7    good
4    Dan        G     22      12   great
5   Eric        C     32      11   great
6  Frank       NA     NA      NA missing

Ressources additionnelles

Comment organiser les lignes dans R
Comment compter les observations par groupe dans R
Comment filtrer les lignes contenant une certaine chaîne dans R

Ajouter un commentaire

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