如何在 dplyr 中传递字符串作为变量名


您可以使用以下方法之一将字符串作为 dplyr 中的变量名称传递:

方法一:使用get()

 df %>% filter(get(my_var) == ' A ')

方法2:使用.data

 df %>% filter(. data [[my_var]] == ' A ')

以下示例展示了如何在实践中使用以下数据框使用每种方法:

 #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

示例 1:使用 get() 将字符串作为 dplyr 中的变量名称传递

如果我们尝试通过将字符串作为变量名传递给 dplyr 中的filter()函数来过滤数据框,我们将得到一个空数据框:

 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)

解决这个问题的一种方法是将变量名称包装在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

使用filter ()函数中的get()函数,我们能够成功过滤数据框中的行,仅筛选出团队等于A的行。

示例 2:使用 .data 在 dplyr 中传递字符串作为变量名

将字符串作为变量名传递给 dplyr 中的filter()函数的另一种方法是使用.data函数,如下所示:

 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

使用filter()函数中的.data函数,我们能够成功过滤数据框中的行,仅查找团队等于A的行。

其他资源

以下教程解释了如何在 dplyr 中执行其他常见任务:

如何使用 dplyr 按组选择第一行
如何使用 dplyr 按多个条件进行过滤
如何使用 dplyr 过滤包含特定字符串的行

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注