具有动态变量名称的 r dplyr 过滤器

Posted

技术标签:

【中文标题】具有动态变量名称的 r dplyr 过滤器【英文标题】:r dplyr filter with a dynamic variable name 【发布时间】:2018-09-22 00:27:33 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

它是一个字符串,所以我们可以用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

【讨论】:

非常感谢!伙计,使用 dplyr 有点痛苦。【参考方案2】:

而不是按列的名称引用,只需将整个列指定为过滤依据。

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

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

【讨论】:

请注意,这不能放在 dplyr 堆栈的中间

以上是关于具有动态变量名称的 r dplyr 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

将变量名称传递给另一个函数中的 dplyr 函数会返回找不到对象错误

在 R dplyr 中过滤具有多个条件名称匹配的数据框

r/dplyr:在 UDF 中使用动态命名的变量

在 R 中使用 dplyr 进行过滤时,为啥过滤掉的变量级别会保留在过滤后的数据中? [复制]

函数R中的Dplyr变量名称

如何根据具有名称类型的变量在 R 中过滤和计数