【问题标题】:Filter rows of a dataframe based on a column when both column name and values to filter are in variables [duplicate]当要过滤的列名和值都在变量中时,根据列过滤数据框的行[重复]
【发布时间】:2019-07-30 13:20:36
【问题描述】:

对于以下场景,我得到一个空数据框

D = data.frame(X = c("x1", "x2", "x3"))
vals = c("x1", "x2")
col = "X"
dplyr::filter(D, col %in% vals)

但是按照以下方式进行操作

dplyr::filter(D, X %in% vals)

我无法硬编码列名或过滤值。我需要第一个场景才能工作。

【问题讨论】:

  • @tmfmnk 问题略有不同,在这个问题中,我们试图过滤多个值的行。但是这两个问题中的解决方案都应该通过使用==%in% 更改过滤来工作?
  • 当然,它正在工作。您可以使用filter(D, !!as.name(col) %in% vals)filter(D, UQ(as.name(col)) %in% vals)

标签: r dplyr


【解决方案1】:

我们可以转换为symbol 并评估 (!!)

dplyr::filter(D, !! rlang::sym(col) %in% vals)
#    X
#1 x1
#2 x2

或者另一个选项是filter_at

D %>%
    filter_at(vars(col), any_vars(. %in% vals))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多