我一直在尝试创建一个在 Shiny 应用程序中使用的通用函数,该函数将允许使用侧边栏菜单按任意条件列表过滤数据框。因此,您可以使用侧边栏菜单来选择要过滤的列和要过滤的条件。
这是我使用 mtcars 数据集创建的当前适用于我的目的的 Rmd 的精简可重现示例:
https://github.com/keithmcnulty/flexfiltering/blob/master/index.Rmd
请参阅我的函数filter1_by
,filter2_by
等,dplyr::filter_at
因为我必须将列名与非标准评估中的值区别对待。这迫使我必须根据我想要的过滤器数量来创建几个函数。例如:
filter2_by <- function(df, f1, fv1, f2, fv2) {
filter_f1 <- quo(f1)
filter_f2 <- quo(f2)
df %>%
dplyr::filter_at(vars(!!filter_f1), all_vars(. == fv1)) %>%
dplyr::filter_at(vars(!!filter_f2), all_vars(. == fv2))
}
我真正想做的只是创建一个函数filter_by(df, ...)
,它将接受任意一组过滤条件,例如:
filter_by(mtcars, input$filter1 == input$filter1val,
input$filter2 == input$filter2val)
希望有任何关于如何编码的建议filter_by
。
谢谢!