使用 dplyr 函数对数据进行过滤、分组和变异的函数。基本管道序列在函数之外工作得很好,这就是我使用真实列名称的地方。将其放入一个函数中,其中列名称是一个变量,并且某些函数可以工作,但有些函数则不能,尤其是 dplyr::filter()。例如:
var1 <- c('yes', NA, NA, 'yes', 'yes', NA, NA, NA, 'yes', NA, 'no', 'no', 'no', 'maybe', NA, 'maybe', 'maybe', 'maybe')
var2 <- c(1:18)
df <- data.frame(var1, var2)
Run Code Online (Sandbox Code Playgroud)
这工作正常(即过滤 NA):
df%>%filter(!is.na(var1))
Run Code Online (Sandbox Code Playgroud)
...但这并没有:
x <- "var1"
df%>%filter(!is.na(x))
Run Code Online (Sandbox Code Playgroud)
...但这确实:
df%>%select(x)
Run Code Online (Sandbox Code Playgroud)
需要专门过滤掉 NA。
尝试了 get("x"),不行,然后切片:
df[!is.na(x),]
Run Code Online (Sandbox Code Playgroud)
……也不好。
有关如何传递变量以在函数内部(或外部)进行过滤以及为什么变量与其他 dplyr 函数一起使用的任何想法?
我们可以使用sym来转换为符号,然后用 来UQ评估它
library(rlang)
library(dplyr)
df %>%
filter(!is.na(UQ(sym(x))))
# var1 var2
#1 yes 1
#2 yes 4
#3 yes 5
#4 yes 9
#5 no 11
#6 no 12
#7 no 13
#8 maybe 14
#9 maybe 16
#10 maybe 17
#11 maybe 18
Run Code Online (Sandbox Code Playgroud)