【问题标题】:Filtering data.tables in shiny with 2 inputs用 2 个输入过滤 data.tables
【发布时间】:2018-02-14 18:57:13
【问题描述】:

代码如下。我想根据两个输入过滤 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)

【问题讨论】:

  • 你为什么使用data.tabledplyr::filter

标签: r shiny data.table


【解决方案1】:

是的,你可以这样做。由于我们无权访问您的数据集,因此这里有一个使用 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)

【讨论】:

  • 如果您有 selectize 占位符,!is.null 是否有效?说我最初运行应用程序的长度是 1。认为你已经做了if (nchar(input$col)...
猜你喜欢
  • 2016-10-24
  • 2018-02-05
  • 2022-01-23
  • 2020-11-21
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
  • 2014-06-15
相关资源
最近更新 更多