【问题标题】:Dynamic filtering with dplyr使用 dplyr 进行动态过滤
【发布时间】:2020-05-27 12:51:29
【问题描述】:

对于闪亮应用程序中的所有数字字段,我正在动态添加一个滑块。现在我也想添加 基于滑块输入的数据动态过滤器。

用数据和静态过滤的一些代码来说明问题:

library(glue)
library(tidyverse)
data <-
  tibble(
    a = c(61, 7, 10, 2, 5, 7, 23, 60),
    b = c(2, 7, 1, 9, 6, 7, 3, 6),
    c = c(21, 70, 1, 4, 6, 2, 3, 61)
  )

input <- list("a" = c(2, 10),
              "b" = c(7, 10),
              "c" = c(1, 5))


data %>% filter(
  between(a, input$a[1], input$a[2]),
  between(b, input$b[1], input$b[2]),
  between(c, input$c[1], input$c[2])
)

有没有办法实现动态过滤?

【问题讨论】:

  • 我是否遗漏了什么或误解了您的问题?您拥有的 filter() 有效.. 只要您将其传递给反应性对象,您的应用程序就会立即更新
  • 是的。确实有效。但是,我想将滑块和过滤器动态添加到所有数字字段的闪亮应用程序中。添加滑块很简单,但是动态过滤很棘手。我现在有一个解决方案,但你知道更类似于 dpylr 的方式吗?

标签: r dplyr


【解决方案1】:

我为自己构建了一个动态过滤器,它基本上可以工作:


query <- data %>% filter_if(is.numeric) %>% colnames() %>% map( function(feature){
  "between({
    feature
  }, input${
    feature
  }[1], input${
    feature
  }[2])" %>% glue()
}) %>% paste0(collapse = ", ")

eval(parse(text = "data %>% filter({
  query
})" %>% glue()))

有 dplyr 方式吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2021-10-31
    • 2019-07-21
    • 2012-08-13
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多