Comment passer une chaîne comme nom de variable dans dplyr
Vous pouvez utiliser l’une des méthodes suivantes pour transmettre une chaîne comme nom de variable dans dplyr :
Méthode 1 : utilisez get()
df %>% filter(get(my_var) == 'A')
Méthode 2 : utiliser .data
df %>% filter(.data[[my_var]] == 'A')
Les exemples suivants montrent comment utiliser chaque méthode en pratique avec le bloc de données suivant :
#create data frame df <- data.frame(team=c('A', 'A', 'A', 'B', 'B'), points=c(99, 90, 86, 88, 95), assists=c(33, 28, 31, 39, 34), rebounds=c(30, 28, 24, 24, 28)) #view data frame df team points assists rebounds 1 A 99 33 30 2 A 90 28 28 3 A 86 31 24 4 B 88 39 24 5 B 95 34 28
Exemple 1 : passer une chaîne comme nom de variable dans dplyr à l’aide de get()
Si nous essayons de filtrer un bloc de données en passant une chaîne comme nom de variable à la fonction filter() dans dplyr, nous obtiendrons un bloc de données vide :
library(dplyr)
#define variable
my_var <- 'team'
#attempt to filter for rows where team is equal to a variable
df %>% filter(my_var == 'A')
[1] team points assists rebounds
<0 rows> (or 0-length row.names)
Une façon de contourner ce problème consiste à envelopper le nom de la variable dans la fonction get() :
library(dplyr)
#define variable
my_var <- 'team'
#filter for rows where team is equal to a variable
df %>% filter(get(my_var) == 'A')
team points assists rebounds
1 A 99 33 30
2 A 90 28 28
3 A 86 31 24
En utilisant la fonction get() dans la fonction filter() , nous sommes en mesure de filtrer avec succès les lignes du bloc de données uniquement pour les lignes où l’équipe est égale à A.
Exemple 2 : transmettre une chaîne comme nom de variable dans dplyr à l’aide de .data
Une autre façon de transmettre une chaîne comme nom de variable à la fonction filter() dans dplyr consiste à utiliser la fonction .data comme suit :
library(dplyr)
#define variable
my_var <- 'team'
#filter for rows where team is equal to a variable
df %>% filter(.data[[my_var]] == 'A')
team points assists rebounds
1 A 99 33 30
2 A 90 28 28
3 A 86 31 24
En utilisant la fonction .data dans la fonction filter() , nous sommes en mesure de filtrer avec succès les lignes du bloc de données uniquement pour les lignes où l’équipe est égale à A.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans dplyr :
Comment sélectionner la première ligne par groupe à l’aide de dplyr
Comment filtrer selon plusieurs conditions à l’aide de dplyr
Comment filtrer les lignes contenant une certaine chaîne à l’aide de dplyr