Вот вам начало, хотя это может быть не совсем то, что вы хотите. Я думаю, что вы хотите динамический список выбора c, основанный на типе школы (начальная, средняя ...). Вот способ, которым вы можете сделать это с 2 списками выбора, где нижний является динамическим c, отвечая на выбор в верхнем списке выбора.
Я также попытался упростить настройку данных. Вы можете скопировать / вставить код для его запуска.
library(shiny)
library(tidyverse)
#define data elements
schools <- data.frame (schoolName= c('Adams', 'Van Buren', 'Clinton', 'Douglas', 'Edwards','Franklin', 'Grant', 'Harrison', 'Ignatius', 'Justice', 'Kellogg', 'Lincoln'),
schoolType = c('Elementary','Elementary','Elementary','Elementary','Middle','Middle','Middle','High','High','High','Multi-level','Multi-level'),
schoolEnrollment = c(300, 305, 265, 400, 500, 450, 475, 900, 800, 850, 1200, 1500))
# Define UI
ui <- fluidPage(
tags$style(".optgroup-header { color: #FFFFFF !important; background: #000000 !important; }"),
# Application title
titlePanel("Expandable selectInput"),
# Sidebar with a select input
sidebarLayout(
sidebarPanel(
selectInput(inputId = 'schoolType',
label = 'Select a School Type',
choices = list('Elementary',
'Middle',
'High',
'Multi-level'),
),
selectInput("schoolName", "Select School:","Elementary"),
),
# Show a plot
mainPanel(
plotOutput("myPlot")
)
)
)
# Define server logic required to draw a plot
server <- function(input, output, session) {
# Set up the selection for counties
observe ({
selectionSchoolNames <- sort(unique(unlist(subset(schools$schoolName,schools$schoolType==input$schoolType))))
updateSelectInput(session, "schoolName", choices = selectionSchoolNames)
})
output$myPlot <- renderPlot({
#filter the data based on selectInput
schoolsDataframe <- schools %>%
filter(schoolType == input$schoolType)
# draw the plot
ggplot(data = schoolsDataframe,
mapping = aes(x = schoolName,
y = schoolEnrollment))+
geom_col()
})
}
# Run the application
shinyApp(ui = ui, server = server)