Я хочу создать блестящее приложение, которое фильтрует таблицу данных по двум выбранным входам, один из которых является множественным и зависит от другого.Первый выбранный вход - категория, а второй - бренд.Бренд зависит от категории ввода.Я уже сделал два зависимых ввода, но когда я перехожу к процессу фильтрации таблицы данных, я застреваю.Потому что, когда я запускаю приложение и фильтрую таблицу данных с зависимым множественным выбором, я получаю ошибку " 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)
. Я надеюсь, что этот пример позволит вам понять, что яхочу сделать.