Shiny中selectInput选全部院校时dplyr::filter返回全量数据的问题
解决Shiny中selectInput选择“全部院校”时返回所有数据的问题
你的问题出在filter条件上:当选择"All Universities"(对应值为"all")时,struc_uni == input$university会因为struc_uni列里没有"all"这个值,过滤掉所有行,导致表格无数据。
两种可行的修改方案:
方案1:使用逻辑或表达式(简洁推荐)
直接在filter里添加判断,当选择"all"时保留所有行,否则匹配对应院校:
output$headcountTable <- function(){ enroll_report |> dplyr::filter(input$university == "all" | struc_uni == input$university) |> # 修改这一行 dplyr::select(-struc_uni) |> dplyr::select(-struc_code) |> kbl(booktabs = T, col.names = c("Campus", "Fall 2021", "Fall 2022", "Change", "%", "Fall 2021", "Fall 2022", "Change", "%"), caption = "holder text") |> add_header_above(c("", "Headcount" = 4, "Credit Hours" = 4)) |> kable_styling("striped", full_width = T, position = "left", font_size = 12) }
方案2:使用if-else分支判断
如果觉得逻辑更清晰,也可以用分支来处理:
output$headcountTable <- function(){ filtered_data <- if(input$university == "all"){ enroll_report } else { dplyr::filter(enroll_report, struc_uni == input$university) } filtered_data |> dplyr::select(-struc_uni) |> dplyr::select(-struc_code) |> kbl(booktabs = T, col.names = c("Campus", "Fall 2021", "Fall 2022", "Change", "%", "Fall 2021", "Fall 2022", "Change", "%"), caption = "holder text") |> add_header_above(c("", "Headcount" = 4, "Credit Hours" = 4)) |> kable_styling("striped", full_width = T, position = "left", font_size = 12) }
说明:
- 方案1的逻辑是:只要满足「选择了全部院校」或者「院校匹配」其中一个条件,就保留该行,这样选"all"时所有行都会被保留。
- 方案2先提前过滤数据,逻辑更直观,适合后续需要对过滤后的数据做更多操作的场景。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

