首页 > 解决方案 > R:过滤器()基于从列表中命名的列?

问题描述

如何使用filter()列表中的列名?

我认为以下方法会起作用,但事实并非如此:

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

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

注意:filter(dt, col1 == "entry")工作正常,但这将在一个函数中,我想提供特定的列名..

标签: rfilter

解决方案


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

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

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

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))

推荐阅读