【问题标题】:Multiple filters Shiny多重滤镜闪亮
【发布时间】:2021-06-22 14:00:17
【问题描述】:

我正在尝试在下面的示例中让 2 选择所有过滤器一起工作;该逻辑适用于 1 个过滤器。

##CREATE DATA

Director <- c("dir1", "dir1","dir1", "dir2", "dir2", "dir3", "dir3", "dir3")
Manager <- c("mgr1", "mgr","mgr3", "mgr4", "mgr5", "mgr6", "mgr7", "mgr8")

  df <- data.frame(Director, Manager)

  df$Sales <- sample(100, size = nrow(df), replace = TRUE)

  director_choices = c("All", c(as.character(unique(df$Director))))
  manager_choices = c("All", c(as.character(unique(df$Manager))))


ui <-  dashboardPage(
    
    # Application title
    dashboardHeader(title = "Sales"),
    
    # Sidebar with a slider input 
    dashboardSidebar(
      sidebarMenu(
        menuItem("Maps",
                 tabName = "Maps",
                 icon = icon("dashboard")),
        hr(),
        selectInput("Director", "Director", choices = director_choices, multiple = T, selected = "All"),
        selectInput("Manager", "Manager", choices = manager_choices, multiple = T)

下面的过滤器可以让我在主管级别进行正确的过滤,我的目标是在经理级别有一个全选过滤器来响应主管过滤器。

  server <- function(input, output, session) {

    observe({
      if("All" %in% input$Director)
        selected_choices = Director[-1]
      else
        selected_choices = input$Director
      updateSelectInput(session, "Director", selected = selected_choices)
    })

  # Run the application 
  shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您无需更新第一个selectInput。只需第二个就足够了。试试这个。

    ##CREATE DATA
    
    Director <- c("dir1", "dir1","dir1", "dir2", "dir2", "dir3", "dir3", "dir3")
    Manager <- c("mgr1", "mgr2","mgr3", "mgr4", "mgr5", "mgr6", "mgr7", "mgr8")
    
    df <- data.frame(Director, Manager)
    
    df$Sales <- sample(100, size = nrow(df), replace = TRUE)
    
    director_choices = c("","All", c(as.character(unique(df$Director))))
    manager_choices = c(as.character(unique(df$Manager)))
    
    ui <-  dashboardPage(
      
      # Application title
      dashboardHeader(title = "Sales"),
      
      # Sidebar with a slider input 
      dashboardSidebar(
        sidebarMenu(
          menuItem("Maps",
                   tabName = "Maps",
                   icon = icon("dashboard")),
          hr(),
          selectInput("Director", "Director", choices = director_choices, multiple = T, selected = "All"),
          selectInput("Manager", "Manager", choices = manager_choices, multiple = T)
        )
      ),
      dashboardBody()
    )
    
    server <- function(input, output, session) {
      
      observe({
        df1 <- df[df$Director %in% input$Director,]
        if (is.null(input$Director)) {selected_choices = ""
        }else if("All" %in% input$Director) {selected_choices = manager_choices
        }else selected_choices = unique(df1$Manager)
        
        updateSelectInput(session, "Manager", choices = selected_choices)
      })
      
    }
      
    # Run the application 
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 真的很接近。所以这将更新经理过滤器,但这不允许我取消选择属于董事分组的经理。
    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 2020-10-30
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2017-05-05
    相关资源
    最近更新 更多