[英]Shiny dynamic filter of dataframe
我知道已经有一些关于这个主题的问题,但我仍然在为我自己的项目而苦苦挣扎。
在我的闪亮中,有三个选择输入小部件,它们应该相互反应。 只有有意义的组合才是可能的。
代码现在更新为使用 mtcars。 一些变量名称现在很奇怪,但这应该很重要。
library(shiny)
ui <- fluidPage(
selectInput(inputId = "INseason", label = "Season", choices = c("ALL", sort(unique(mtcars$am), decreasing = TRUE)), selected = NULL),
selectInput(inputId = "INcategory", label = "Category", choices = c("ALL", sort(unique(mtcars$gear))), selected = NULL),
selectInput(inputId = "INteams", label = "Team", choices = c("ALL", sort(unique(mtcars$carb))), selected = NULL)
)
server <- function(input, output, session) {
rv <- reactiveValues()
rv$data <- mtcars
observe({
if(input$INseason != "ALL") {
rv$data <- filter(rv$data, am == input$INseason)
}
if(input$INcategory != "ALL") {
rv$data <- filter(rv$data, gear == input$INcategory)
}
if(input$INteams != "ALL") {
rv$data <- filter(rv$data, carb == input$INteams)
}
})
observe({
updateSelectInput(session, "INseason", choices = c("ALL", sort(unique(rv$data$am), decreasing = TRUE)))
updateSelectInput(session, "INcategory", choices = c("ALL", sort(unique(rv$data$gear))))
updateSelectInput(session, "INteams", choices = c("ALL", sort(unique(rv$data$carb))))
})
}
shinyApp(ui, server)
使用此代码,我无法选择某些内容,因为“全部”已被预选。
感谢您的帮助!
最好的事物
您必须将selected
参数传递回updateSelectInput
,否则它将始终默认为第一个类别(即使选择了某些内容)。
将最后一个块替换为:
observe({
updateSelectInput(session, "INseason",
choices = c("ALL", sort(unique(rv$data$am), decreasing = TRUE)),
selected = if(is.null(input$INseason)) "ALL" else input$INseason)
updateSelectInput(session, "INcategory",
choices = c("ALL", sort(unique(rv$data$gear))),
selected = if(is.null(input$INcategory)) "ALL" else input$INcategory)
updateSelectInput(session, "INteams",
choices = c("ALL", sort(unique(rv$data$carb))),
selected = if(is.null(input$INteams)) "ALL" else input$INteams)
})
(此代码可以更整洁,但它有效!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.