使用不同列中的2个从属选择输入来过滤闪亮的数据表

时间:2019-04-02 13:31:09

标签: r select filter datatable shiny

我想创建一个闪亮的应用程序,该应用程序过滤具有两个选择输入的数据表,其中一个是多个输入,并且依赖于另一个。首先选择输入是类别,第二个选择是品牌。品牌取决于类别输入。我已经做了两个从属选择输入,但是当我进入数据表的过滤过程时,我陷入了困境。因为当我运行应用程序并使用相关的多项选择过滤数据表时,出现错误" Warning in df$C_BRAND == input$brand : longer object length is not a multiple of shorter object length". 我知道我只选择一个值,第二个选择它的值,但是当有更多值时,过滤掉fales。

runApp(list(
  ui = basicPage(
    sidebarPanel(
      selectInput("kat", "Kategorija", choices = unique(df1$C_CTG), selected = unique(df1$C_CTG)[1]),
      tags$hr(),
      selectInput("brand", "Brandas", choices = df1$C_BRAND[df1$C_CTG == unique(df1$C_CTG)[1]], 
                  multiple = TRUE)
    ),
    mainPanel(
      DT::dataTableOutput("table")
    )
  ),
  server = function(input, output, session) {

    observe({
      kat <- input$kat
      updateSelectInput(session, "brand", choices = df1$C_BRAND[df1$C_CTG == kat])
    })
    df <- main2019

    filterData1 <- reactive({
      df[which(df$C_CTG == input$kat & df$C_BRAND == input$brand),]
    })

    output$table <- DT::renderDataTable({
      DT::datatable(filterData1(),selection="multiple",rownames = F)
    })
  }
))

我知道我必须更改此代码行

df[which(df$C_CTG == input$kat & df$C_BRAND == input$brand),]

但是我不知道该放在哪里,当我在选择输入中选择更多选项时,过滤将起作用。

这里我做了一个简单的数据表小样本:

C_CTG <- sample(c(1:5),8,replace=TRUE)
brand <- sample(c(6:10),8,replace=TRUE)
store <- sample(c("shoes", "phones", "food", "drinks", "pets"),8, replace = TRUE)
input <- data.frame(C_CTG,brand,store)

Here is example of my generated data table

例如,我希望在第一选择中,我会在input$C_CTG中选择值“ 2”,然后在第二选择中input$brand中,我会选择“ 7”或“ 10”值并根据我要选择的内容(7个或10个或两个),数据表将显示一行input$C_CTG=2input$brand=10或两行input$C_CTG=2input$brand=7,或者当我选择input$C_CTG=2input$brand=c(7,10)时显示3行 我希望这个例子能使您理解我想做的事。

0 个答案:

没有答案