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