【问题标题】:Adding "All values" in my inputs filters in shiny app在闪亮应用程序的输入过滤器中添加“所有值”
【发布时间】:2017-06-17 01:31:03
【问题描述】:

我的应用运行良好,但我想添加一个选项,允许用户选择变量的所有值。 例如,对于第一个过滤器,我想要像“All”这样的东西,其中包括“A”、“B”和“C”。 和其他过滤器一样,我尝试了很多技巧,但我无法解决这个问题。 任何帮助将不胜感激

library(shiny)
library(DT)
library(dplyr)

VG <- c("A", "A", "B", "B", "B", "C", "A")
AG <- c(1, 2, 1, 3, 4, 2, 1)
AP <- letters[1:7]
AK <- paste(VG, AG, AP, sep = "-")
data <- data.frame(VG, AG, AP, AK)

ui <- fluidPage(
  column(3,
         selectInput("VG", label = h4("VG.ETD"), choices = unique(data$VG)),
         selectInput("AG", label = h4("AG.ETD"), choices = unique(data$AG))),
  column(3,
         selectInput("AP", label = h4("AP.ETD"), choices = unique(data$AP)),
         selectInput("AK", label = h4("AK.ETD"), choices = unique(data$AK)),
         actionButton("go", "GO")),
  column(6,DT::dataTableOutput("dtt"))
)

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



  observeEvent(input$VG,{
    updateSelectInput(session, 'AG', choices = unique(data$AG[data$VG %in% input$VG]))
  })

  observeEvent(c(input$VG, input$AG),{
    updateSelectInput(session, 'AP', choices = unique(data$AP[data$AG %in% input$AG &
                                                              data$VG %in% input$VG]))
  })

  observeEvent(c(input$VG, input$AG, input$AP), {
    updateSelectInput(session, 'AK', choices = unique(data$AK[data$AP %in% input$AP &
                                                              data$AG %in% input$AG &
                                                              data$VG %in% input$VG]))
  })

  df <- eventReactive(input$go, {
    data %>% filter(VG %in% input$VG, 
                    AG %in% input$AG,
                    AP %in% input$AP,
                    AK %in% input$AK)

  })

  output$dtt <- DT::renderDataTable({
    df()

  })

}

shinyApp(ui=ui,server=server)

【问题讨论】:

  • 也许将选择更改为:c('All',unique(data$VG)),然后创建一个新的反应变量来查看该 selectinput 的输入。有一个 if 语句说 if(input$X == 'All'){c('A','B','C')}else{input$X}。然后将该反应变量传递给您的过滤器。还有一个 multiple = TRUE, selectinput 的参数,它允许用户选择多个选项。

标签: r shiny


【解决方案1】:

为了解决过去类似的问题,我使用了以下方法:

  1. 使用我想使用的过滤器选项的名称创建了一个向量(在本例中,“所有状态”以及数据框 State 列中的实际唯一变量路德

    states <- c("All states", levels(rudd$State))
    
  2. 在输入面板中使用向量的值作为可能的输入(states[1] (="All states") 是默认选择)

    selectInput("state", "Choose a state:", choices = states, selected = states[1])
    
  3. 创建了一个条件语句来根据用户输入选择要显示的正确数据子集(并继续将临时的子集表传递给响应式输出)

    library("dplyr")
    
    dat <- reactive({
        if (input$State!="All states"){ 
        temp <- state_map %>%
        filter(State== tolower(input$State)) 
    } else { 
        temp <- state_map[1,] 
    }
    })
    

换句话说,如果选择了特定的状态,则根据该选择过滤数据框,否则所有行都将传递到交互式输出。

完整代码在这里:https://github.com/DrRadan/RiskEcon-Shiny-App/blob/master/Health.Rmd 及其在此处的实现:https://rdna.shinyapps.io/Health/

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2018-06-11
    • 1970-01-01
    • 2017-11-18
    • 2014-04-11
    • 1970-01-01
    • 2020-08-18
    • 2018-05-16
    • 2020-06-16
    • 2017-07-27
    相关资源
    最近更新 更多