【问题标题】:r dplyr filter with a dynamic variable name具有动态变量名称的 r dplyr 过滤器
【发布时间】: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

【问题讨论】:

    标签: r filter dplyr


    【解决方案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 堆栈的中间
    猜你喜欢
    • 2021-07-21
    • 2019-04-04
    • 2022-01-13
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多