繁体   English   中英

数据框的闪亮动态过滤器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM