【问题标题】:`enquo` of column name variable not working with `dplyr::filter` [duplicate]列名变量的“enquo”不适用于“dplyr::filter”[重复]
【发布时间】:2020-02-01 00:17:17
【问题描述】:

假设我们有以下数据框:

df <- data.frame(x=1:10, odd=rep(c(T,F), 5))

还有一个存储odd列名称的变量:

odd_col <- 'odd'

如何在dplyr::filter 操作中使用odd_col 来引用odd 列?

根据我在the documentation on Quoting in dplyr 中读到的内容,我认为以下是正确的方法:

library(dplyr)

odd_col <- enquo(odd_col)

# give the rows with odd entries
filter(df, !!odd_col)

但这会导致错误:

错误:参数 2 过滤条件不计算为逻辑向量

但是,这种方法似乎适用于其他 dplyr 操作,例如,

pull(df, !!odd_col)
# [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE

【问题讨论】:

  • 它适用于 pull,因为 pull 确实接受字符串,即 pull(df, 'odd') 有效,但 filter(df, 'odd') 无效。所以问题是你在字符串上使用 enquo 而不是原始变量名。

标签: r dplyr quosure


【解决方案1】:

我们可以使用sym 代替enquo,因为它是一个字符串

library(dplyr)
filter(df, !!rlang::sym(odd_col))
# x  odd
#1 1 TRUE
#2 3 TRUE
#3 5 TRUE
#4 7 TRUE
#5 9 TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 2020-10-16
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多