多重滤镜闪亮

时间:2021-06-22 14:00:17

标签: r shiny

我正在尝试让 2 Select all filters 在下面的示例中协同工作;该逻辑适用于 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)

1 个答案:

答案 0 :(得分: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)
相关问题