да, это возможно сделать. Поскольку я не мог получить доступ к вашему набору данных, мне пришлось создать свой собственный.
Ключом к этому является то, что ваш набор данных для фильтра будет зависеть от предыдущего выбора.
Я также добавил условную функцию для вашего второго фильтра в качестве бонуса, вы можете удалить его для своих нужд.
ui <- fluidPage(
#
titlePanel("UW Model Output"),
sidebarLayout(
sidebarPanel(
uiOutput("firstSelection"),
uiOutput("secondSelection")
),
mainPanel(
)
)
)
server <- function(input, output){
dat <- data.frame(CustomerNumber = c(1,1,1,2,2,3,4,5), State = c("AZ","FL","IL","AZ","NC","IN","WI", "CO"), stringsAsFactors = FALSE)
output$firstSelection <- renderUI ({
selectInput(inputId = "First", "First Filter",
choices = c("",paste0(sort(as.character(unique(dat$CustomerNumber)))))
)
})
output$secondSelection <- renderUI ({
Lvl2 <- dat[dat$CustomerNumber == input$First,]
conditionalPanel(condition = "input.First != ''",
selectInput(inputId = "Second", "Second Filter",
choices = paste0(sort(unique(Lvl2$State)))
)
)
})
}
shinyApp(ui, server)
Обновлены
library (DT)
ui <- fluidPage(
#
titlePanel("UW Model Output"),
sidebarLayout(
sidebarPanel(
uiOutput("firstSelection"),
uiOutput("secondSelection")
),
mainPanel(
DT::dataTableOutput("table1")
)
)
)
server <- function(input, output){
dat <- data.frame(CustomerNumber = c(1,1,1,2,2),
State = c("AZ","FL","IL","AZ","NC"),
Col3 = c("B","D","C","E","F"),
Col4 = c("G","H","I","J","K"),
Col5 = c("L","M","N","O","P"),
stringsAsFactors = FALSE)
#Fitler Selections
output$firstSelection <- renderUI ({
selectInput(inputId = "First", "First Filter",
choices = c("",paste0(sort(as.character(unique(dat$CustomerNumber)))))
)
})
output$secondSelection <- renderUI ({
Lvl2 <- dat[dat$CustomerNumber == input$First,]
conditionalPanel(condition = "input.First != ''",
selectInput(inputId = "Second", "Second Filter",
choices = paste0(sort(unique(Lvl2$State)))
)
)
})
#Data Table
output$table1 <- DT::renderDataTable({
temp <- dat[dat$CustomerNumber == input$First & dat$State == input$Second,]
temp <- temp[-c(1:2)]
},
rownames = FALSE)
}
shinyApp(ui, server)