r dplyr过滤器,带有动态变量名称

时间:2018-04-12 01:23:19

标签: r filter dplyr

我试图只选择没有NAs的行:

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&lt; - “a”。 非常感谢你!

2 个答案:

答案 0 :(得分:6)

这是一个字符串,因此我们可以使用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

答案 1 :(得分: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]