我的应用程序运行良好,但我想添加一个允许用户选择变量的所有值的选项。 例如,对于第一个过滤器,我想要“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)
答案 0 :(得分:1)
为了解决过去类似的问题,我采用了以下方法:
创建了一个向量,其中包含我想要使用的过滤器选项的名称(在本例中为“所有状态”以及数据框状态列中的实际唯一变量的拉德强>)
states <- c("All states", levels(rudd$State))
在输入面板中使用矢量值作为可能的输入(状态[1](=“所有状态”)是默认选择)
selectInput("state", "Choose a state:", choices = states, selected = states[1])
创建了一个条件语句,根据用户输入选择要显示的正确数据子集(并继续将临时的子表格传递给反应输出)
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/
我希望这会有所帮助。