R:filter()基于列表中命名的列吗?

时间:2018-11-13 17:41:49

标签: r filter

如何将filter()与列表中的列名一起使用?

我认为以下方法会起作用,但不会:

filter(dt, myColList[1] == "entry")

^^其中:myColList <- c("col1", "col2", "col3")

NB:filter(dt, col1 == "entry")可以正常工作,但这将在函数中,我想提供特定的列名。

1 个答案:

答案 0 :(得分:2)

我们可以使用sym将其转换为符号,然后进行评估(!!

library(tidyverse)
dt %>%
   filter( !! rlang::sym(myColList[1]) == "entry") 

或使用可以将字符串作为输入变量的filter_at

dt %>% 
   filter_at(vars(myColList[1]), all_vars(.== 'entry'))

作为可重复的示例

myColList <- names(iris)[1:3]
data(iris)
iris %>%
    filter(!! rlang::sym(myColList[1]) > 5)

iris %>% 
    filter_at(vars(myColList[1]), all_vars(. > 5))