【问题标题】:Filter Shiny DataTable on Multiple Conditions在多个条件下过滤闪亮的数据表
【发布时间】:2014-10-22 18:17:14
【问题描述】:

以下是rstudio shiny website上提供的数据表演示的直接复制。过滤数据集很容易(例如钻石上的理想,或虹膜上的 setosa),但是有没有办法过滤钻石数据集中的多个条件,例如“理想”和“公平”?我已经尝试了基本的“AND”和“&”语法、空格,似乎没有任何效果。这似乎应该是可能的,但这是可能的还是需要一些迂回的方法?

require(shiny)
runApp(
  list(ui = fluidPage(
    title = 'Examples of DataTables',
    sidebarLayout(
      sidebarPanel(
        conditionalPanel(
          'input.dataset === "diamonds"',
          checkboxGroupInput('show_vars', 'Columns in diamonds to show:',
                             names(diamonds), selected = names(diamonds))
        )
      ),
      mainPanel(
        tabsetPanel(
          id = 'dataset',
          tabPanel('diamonds', dataTableOutput('mytable1'))
        )
      )
    )
  ),
  server = shinyServer(function(input, output) {

    # a large table, reative to input$show_vars
    output$mytable1 <- renderDataTable({
      library(ggplot2)
      diamonds[, input$show_vars, drop = FALSE]
    })

  })
  )
)

经过进一步搜索,我怀疑我应该能够使用jquery column filter plugin。为了简化这个问题,这里是上述代码的一个更精简的版本:

library(shiny)
runApp(
  list(ui = basicPage(
    h1('Diamonds DataTable with TableTools'),

    # added column filter plugin
    singleton(tags$head(tags$script(src='https://code.google.com/p/jquery-datatables-column-filter/source/browse/trunk/media/js/jquery.dataTables.columnFilter.js',
                                    type='text/javascript'))),
    dataTableOutput("mytable")
  )
  ,server = function(input, output) {
    output$mytable = renderDataTable({
      diamonds[,1:6]
    }, options = list(
      pageLength = 10,
      columnDefs = I('[{"targets": [0,1],
                     "searchable": true}]')
    )
    )
  }
))

但是,我似乎无法让 columnFilter 插件工作。 columnDefs 语句(已注释掉)工作正常,但是当我尝试执行 columnFilter 语句时,我只得到表头和过滤搜索框。我怀疑必须关闭某些语法才能使其正常工作。作为功​​能示例,请参阅this website。请注意,这也是使用来自rstudio github 的最新版本的闪亮

【问题讨论】:

  • 过滤掉刚刚运行的网页界面?
  • @xiaodai,是的,当 Web 界面运行时,我可以输入 Ideal 将菱形数据集过滤为仅“理想”行,但无法弄清楚如何将“理想”和“公平”过滤为一个例子。一个人怎么能这样选择多个组?

标签: r filter jquery-datatables shiny


【解决方案1】:

关闭正则表达式转义

默认情况下,DataTables 会转义搜索词中的正则表达式字符。但是,从 DataTables 1.10 开始,可以选择 disable the escaping 并允许正则表达式搜索。我们可以使用options 将选项传递给datatable,如下所示:

library(DT)
datatable(mtcars, 
          options = list(search = list(regex = TRUE)))

现在您的搜索可以使用正则表达式。例如,要筛选 Mazda 或 Chrysler 的表,您可以搜索 Mazda|Chrysler

这是关于此事的官方 RStudio page

示例应用

library(shiny)
library(DT)

ui <- fluidPage(
    fluidRow(
        column(width = 9,
               br(),
               DT::dataTableOutput("dt")
               ),
        column(width = 3,
               br(),
               radioButtons("regex", "Enable Regex?", choices = c("yes", "no"), inline = T))
    )
)

server <- function(input, output, session) {
    output$dt <- DT::renderDataTable({
        value <- ifelse(input$regex == "yes", TRUE, FALSE)
        datatable(mtcars, 
                  options = list(search = list(regex = value))
        )
    })
}

shinyApp(ui, server)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 2019-07-04
    • 2017-05-05
    • 2021-12-19
    • 2015-07-14
    • 1970-01-01
    • 2021-04-25
    • 2019-07-26
    相关资源
    最近更新 更多