r - 如何以编程方式提供要通过 dplyr 和 filter_ 应用的过滤器列表

标签 r dplyr

我想创建一个应用于数据框的过滤器列表。就像是:

filters = list(cyl=4, am=1)

然后将其应用于 'mtcars' 数据框,以获取 cyl=4 和 am=1 的记录。我可以做这个:
filter_(mtcars, 
        lazyeval::interp(~ val == var, val = as.name(names(filters[1])), 
                                       var = filters[[1]]))

但这只会选择过滤器列表中的第一个条目。

应用所有过滤器的惯用方法是什么?

(我正在尝试创建一个有点通用的函数,它可以接受一个数据框和一个标准集,并将输出转换。现在,平等对于标准来说很好,但更通用的习语会更好)

最佳答案

将过滤器定义为

filter1 <- ~(cyl==4 & am==1)

或者
filter1 <- "cyl==4 & am==1"

或者
library(lazyeval)
filter1 <- lazy(cyl==4 & am==1)

并用作
mtcars %>% filter_(filter1)

函数示例:
get_cars_with_filter <- function(my_filter) {
  mtcars %>% filter_(lazy(my_filter))
}

get_cars_with_filter(cyl==4 & am == 1)

关于r - 如何以编程方式提供要通过 dplyr 和 filter_ 应用的过滤器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29543527/

相关文章:

r - 如何根据列名将函数应用于特定列?

r - 将数据框转换为每月时间序列

r - 计算连续密度图下的面积

r - 如何将 tibble 中的行乘以另一个 tibble 中的另一个对应行

r - 当行的其余部分重复时,如何通过对一列的值求和来合并表

r - 如何将整行作为列名?

r - 错误 : could not find function "Lag"

r - 过滤到特定列中的特定日期

r - 通过包含级别计算平均值 - 基于整个组扩展窗口

r - 将 R 中的多个列组合成一个新的向量列(最好是 tidyr 解决方案)