使用动态变量名进行 r dplyr 过滤

12

我正在尝试仅选择没有缺失值的行:

library(dplyr)
x = data.frame(a = c(NA, 2, 3, 4))
var_a <- "a"
# This works:
x %>% filter(!is.na(a))
# That works too:
var_a <- quo(a)
x %>% filter(!is.na(!!var_a))
# But this doesn't work:
var_a <- "a"
x %>% filter(!is.na(!!var_a))

我需要更改最后一行的内容才能使其工作吗?因为我必须使用var_a <- "a"。 非常感谢!
2个回答

17

这是一个字符串,因此我们可以使用sym将其转换为符号,然后使用!!

x %>% 
   filter(!is.na(!!rlang::sym(var_a)))
#  a
#1 2
#2 3
#3 4
或者另一个选项是在filter_at中指定对象,然后进行过滤。
x %>% 
   filter_at(var_a, all_vars(!is.na(.)))
#  a
#1 2
#2 3
#3 4

2
非常感谢!使用dplyr有点麻烦。 - user3245256

3

不要按列名引用,只需给出整个列以进行筛选。

x = data.frame(a = c(NA, 2, 3, 4))
var_a <- "a"
x %>% filter(!is.na(!!x[,var_a])) 

注意到我刚刚将var_a更改为x[,var_a]


1
请注意,这不能放在 dplyr 堆栈的中间。 - pdb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接