Фильтрация таблицы блестящих данных с 2 зависимыми входами выбора в разных столбцах - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу создать блестящее приложение, которое фильтрует таблицу данных по двум выбранным входам, один из которых является множественным и зависит от другого.Первый выбранный вход - категория, а второй - бренд.Бренд зависит от категории ввода.Я уже сделал два зависимых ввода, но когда я перехожу к процессу фильтрации таблицы данных, я застреваю.Потому что, когда я запускаю приложение и фильтрую таблицу данных с зависимым множественным выбором, я получаю ошибку " Warning in df$C_BRAND == input$brand : longer object length is not a multiple of shorter object length". Я понимаю, что когда я выбираю только одно значение, второе выбирает его хорошо, но когда есть больше, фильтрация ошибается.

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)

Вот пример моей сгенерированной таблицы данных

Я ожидаю, например, что в моем первомвыберите Я бы выбрал значение "2" в input$C_CTG, а затем во втором выберите input$brand Я бы выбрал выбрать из "7" или "10" значений и в зависимости от того, что я выберу (7 или 10 или оба) таблицы данныхпокажет одну строку, где input$C_CTG=2 и input$brand=10, или две строки, где input$C_CTG=2 и input$brand=7, или может показать 3 строки, когда я выберу input$C_CTG=2 и input$brand=c(7,10). Я надеюсь, что этот пример позволит вам понять, что яхочу сделать.

...