我试图只选择没有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”。 非常感谢你!
答案 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]
。