如何将filter()
与列表中的列名一起使用?
我认为以下方法会起作用,但不会:
filter(dt, myColList[1] == "entry")
^^其中:myColList <- c("col1", "col2", "col3")
NB:filter(dt, col1 == "entry")
可以正常工作,但这将在函数中,我想提供特定的列名。
答案 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))