Dplyr : Comment muter une variable si la colonne contient une chaîne
Vous pouvez utiliser la syntaxe de base suivante dans dplyr pour muter une variable si une colonne contient une chaîne particulière :
library(dplyr) df %>% mutate_at(vars(contains('starter')), ~ (scale(.) %>% as.vector))
Cette syntaxe particulière applique la fonction scale() à chaque variable du bloc de données qui contient la chaîne « starter » dans le nom de la colonne.
L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.
Exemple : muter la variable si la colonne contient une chaîne
Supposons que nous ayons le bloc de données suivant dans R :
#create data frame df <- data.frame(team=c('A', 'B', 'C', 'D', 'E', 'F'), starter_points=c(22, 26, 25, 13, 15, 22), starter_assists=c(4, 5, 10, 14, 12, 10), bench_points=c(7, 7, 9, 14, 13, 10), bench_assists=c(2, 5, 5, 4, 9, 14)) #view data frame df team starter_points starter_assists bench_points bench_assists 1 A 22 4 7 2 2 B 26 5 7 5 3 C 25 10 9 5 4 D 13 14 14 4 5 E 15 12 13 9 6 F 22 10 10 14
Nous pouvons utiliser la syntaxe suivante pour appliquer la fonction scale() à chaque variable du bloc de données qui contient la chaîne « starter » dans le nom de la colonne.
library(dplyr) #apply scale() function to each variable that contains 'starter' in the name df %>% mutate_at(vars(contains('starter')), ~ (scale(.) %>% as.vector)) team starter_points starter_assists bench_points bench_assists 1 A 0.2819668 -1.3180158 7 2 2 B 1.0338784 -1.0629159 7 5 3 C 0.8459005 0.2125832 9 5 4 D -1.4098342 1.2329825 14 4 5 E -1.0338784 0.7227828 13 9 6 F 0.2819668 0.2125832 10 14
En utilisant cette syntaxe, nous avons pu appliquer la fonction scale() pour mettre à l’échelle chaque colonne contenant « starter » de telle sorte que leurs valeurs aient désormais une moyenne de 0 et un écart type de 1.
Notez que les colonnes suivantes ont été modifiées :
- starter_points
- starter_assistes
Toutes les autres colonnes sont restées inchangées.
Notez également que nous pouvons appliquer n’importe quelle fonction que nous souhaitons en utilisant cette syntaxe.
Dans l’exemple précédent, nous avons choisi de mettre à l’échelle chaque colonne avec la chaîne « starter » dans le nom.
Cependant, nous pourrions faire quelque chose de plus simple, comme multiplier les valeurs par deux pour chaque colonne avec « starter » dans le nom :
library(dplyr) #multiply values by two for each variable that contains 'starter' in the name df %>% mutate_at(vars(contains('starter')), ~ (. * 2)) team starter_points starter_assists bench_points bench_assists 1 A 44 8 7 2 2 B 52 10 7 5 3 C 50 20 9 5 4 D 26 28 14 4 5 E 30 24 13 9 6 F 44 20 10 14
Notez que les valeurs des colonnes starter_points et starter_assistes ont été multipliées par deux, tandis que toutes les autres colonnes sont restées inchangées.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans dplyr :
Comment supprimer des lignes à l’aide de dplyr
Comment sélectionner des colonnes par index à l’aide de dplyr
Comment filtrer les lignes contenant une certaine chaîne à l’aide de dplyr