过滤器renderdatatable闪亮

时间:2016-12-20 15:50:31

标签: r shiny

我的闪亮服务器上有一个数据表,在server.R中定义如下:

output$datamining_table <- DT::renderDataTable(datatable(values$datamining_list,selection="single",
                                                       option=list(lengthMenu = list(c(5, 10,20, -1), c('5', '10','20', 'All')),
                                                                   pageLength = 10,scrollX=T),filter = "top",rownames = F))

我的ui.R中还有一个带有按钮的selectizeInput。当我选择selectizeInput的特定值并单击按钮时,我希望下面的数据表可以过滤我的selectizeInput的值。

例如:

数据表:

  • Name1 valueA
  • Name2 valueB
  • Name1 valueC
  • Name3 valueD

如果在selectizeInput中我选择Name1然后点击我的按钮,我希望我的数据表看起来像:

  • Name1 valueA
  • Name1 valueC

将第一列的过滤条件设置为Name1,以便我可以对其进行过滤。 有人会知道如何实现这个目标吗?

非常感谢你的帮助!

编辑: 这是一个可重现的代码:

    library(shiny)
library(DT)
runApp(list(

  ui=
    div(selectizeInput("selectInput","filter",c("a","b","c"),options=list(maxItems=1,create = F,onInitialize = I('function() { this.setValue(""); }'))),
    dataTableOutput("datamining_table")
      ),

  server=function(input, output, session) {
    values <- reactiveValues()
    values$datamining_list <- data.frame(name =c("a","b","c"),
                                         value = c(1,2,3))
    output$datamining_table <- DT::renderDataTable(datatable(values$datamining_list,selection="single",
                                                             option=list(lengthMenu = list(c(5, 10,20, -1), c('5', '10','20', 'All')),
                                                                         pageLength = 10,scrollX=T),filter = "top",rownames = F))
  }))

1 个答案:

答案 0 :(得分:0)

这应该会有所帮助。

    library(shiny)
    library(DT)

    ### User Interface
    ui <- shinyUI(fluidPage(
      mainPanel(
    fluidRow(
    selectizeInput("selectInput",label ="Filter", choices= NULL, selected = NULL)
    ),
    fluidRow(
    DT::dataTableOutput("datamining_table")
       )
     )
     )
    )


server <- shinyServer(function(input, output,session){

  myDataFrame <- data.frame(name =c("a","b","c"),
                            value = c(1,2,3))

  updateSelectizeInput(session, 'selectInput', choices = c('a','b','c'), server = TRUE)

  filterData <- reactive({
      myDataFrame[which(myDataFrame$name == input$selectInput),]

  })

  output$datamining_table <- DT::renderDataTable({
    DT::datatable(filterData(),selection="single",rownames = F)
  })


})

shinyApp(ui = ui, server = server)