我想创建一个闪亮的应用程序,该应用程序过滤具有两个选择输入的数据表,其中一个是多个输入,并且依赖于另一个。首先选择输入是类别,第二个选择是品牌。品牌取决于类别输入。我已经做了两个从属选择输入,但是当我进入数据表的过滤过程时,我陷入了困境。因为当我运行应用程序并使用相关的多项选择过滤数据表时,出现错误" 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=2
和input$brand=10
或两行input$C_CTG=2
和input$brand=7
,或者当我选择input$C_CTG=2
和input$brand=c(7,10)
时显示3行
我希望这个例子能使您理解我想做的事。