我正在尋找一種方法讓用戶根據多個變量的輸入值(例如名稱和年齡)來子集數據,但是一旦在一個輸入中進行了選擇,其他下拉菜單應該是被動的,只能提供與已經選擇的輸入相對應的選項。我從「名字」到「年齡」工作,但如果首先選擇「年齡」,我也希望它以另一種方式工作。我已經在下面發佈了我的代碼。R閃亮。如何使選擇輸入選項在對數據進行子集化時互爲響應
l <- NULL;
l$name <- c('b','e','d','b','b','d','e')
l$age <- c(20,20,21,21,20,22,22)
l <- as.data.frame(l)
l <- as_data_frame(l)
l$name <- as.character(l$name)
server <- shinyServer(function(input,output){
assign('All Names',unique(sort(l$name)))
assign("All Ages", unique(sort(l$age)))
data1 <- reactive(l[which(l$name %in% if(exists(input$name))
{get(input$name)}else{input$name}),])
output$Box1 = renderUI(
if(is.null(input$name) || input$name == "All Names"){
selectInput("name", "Choose Name", choices=c(c("All Names"),
unique(sort(l$name))))
}else{selectInput("name", "Choose Name", choices=c(input$name,c("All
Names")))}
)
output$Box2 = renderUI(
if(is.null(input$age) || input$age == "All Ages"){
selectInput("age", "Choose Age", choices=c("All Ages",
unique(sort(data1()$age))))
}else{ selectInput("age", "Choose Age", choices=c(input$age, "All Ages"))}
)
output$table1 <- renderTable(data1())
output$text1 <- renderPrint(input$name)
data2 <- reactive(data1()[which(data1()$age %in% if(exists(input$age))
{get(input$age)}else{input$age}),])
output$table2 <- renderTable(data2())
})
ui <-shinyUI(fluidPage(
uiOutput("Box1"),
uiOutput("Box2")
,tableOutput("table1"),
textOutput("text1"),
tableOutput("table2")
))
shinyApp(ui,server)
例如,當用戶選擇「B」爲「21」顯示爲「時代」選擇的名字,只有「20」和,但後來曾經的那些時期之一被點擊,我想「名稱」下拉列表中的選項會作出反應,並僅顯示選定年齡段的選項。
任何建議將非常感激!
https://stackoverflow.com/questions/44570404/updating-filters-in-shiny-app同樣的問題比你 –