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

Ajouter un commentaire

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