使用2个输入过滤data.tables闪亮

时间:2018-02-14 18:57:14

标签: r shiny data.table

以下代码。我想基于两个输入过滤data.frame。 input$SelectGroup4将是data.frame中的列名称,input$subsetSelect是该列中的值。这可能吗?注意:整个代码库要大得多,所以我只拿出了这段代码的关键部分。这段代码可能不会在它自己的代码上运行,但这只是为了得到一个大概。

library(shiny)
library(data.table)
ui = fluidPage(
     uiOutput('textField'),
     uiOutput('docIdField'),
     fluidRow(column(4,textInput("keyword", "Enter keyword :", "WB")),
                      fluidRow(column(4, sliderInput("context", "Enter number of words for context :",
                                                     min = 1, max = 10,
                                                     value = 5))),
     fluidRow(column(4,uiOutput('selectGroup4'))),
     fluidRow(column(4,uiOutput('subsetSelect'))),
     fluidRow(column(10,DT::dataTableOutput("kwicTable"))))
}

    server = function(input,output){
        df_corpus1 <- reactive({
              dTemp = as.data.table(datasetInput())
              dTemp = dTemp %>% filter(input$selectGroup4==input$subsetSelect)

            })

          output$kwicTable=renderDataTable({
            dtemp = df_corpus1()
            dtemp = corpus(as.data.frame(dtemp),text_field=input$textField,docid_field=input$docIdField)
            x = kwic(x = dtemp,pattern=input$keyword,window=input$context)
            x = as.data.table(x)
            x[,4:6]
          })
    }

shinyApp(ui,server)

1 个答案:

答案 0 :(得分:2)

是的,你可以这样做。由于我们无权访问您的数据集,因此这是一个包含mtcars数据集的工作示例。

希望这有帮助!

library(shiny)

ui <- fluidPage(
  selectInput('col','Column',colnames(mtcars)),
  uiOutput('ui_col'),
  dataTableOutput('table')
)

server <- function(input,output){

  # Create a new input element with the unique values of the selected column
  output$ui_col <- renderUI({
    req(input$col)
    selectizeInput('val','Value',unique(mtcars[[input$col]]),multiple=T)
  })

  # If both inputs are not null, filter the table
  output$table <- renderDataTable({
    df <- mtcars
    if(!is.null(input$col) & !is.null(input$val))
    {
     df = df[df[[input$col]] %in% input$val,]
    }
    df
  })

}

shinyApp(ui = ui, server = server)