使用 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)

这工作正常(即过滤器NA):
df%>%filter(!is.na(var1))

……但这不是:
x <- "var1"

df%>%filter(!is.na(x))

...但这确实:
df%>%select(x)

需要专门过滤掉NA。

试过 get("x"),不好,切片:
df[!is.na(x),]

……也不好。

关于如何传递变量以在函数内部(或外部)进行过滤以及为什么变量与其他 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

关于r - 为什么 dplyr filter() 在函数内不起作用(即使用变量作为列名)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45261356/

10-12 16:41
查看更多