R Shiny 中的多输入选择

Multiple Input selection in Rshiny

我正在尝试为我的项目构建一个 Rshiny。我试图包括 2 个输入, First Input 是一个下拉列表,其中包含从 1 月到 12 月的月份。 第二个输入可以是下拉列表或任何允许我 select 多个项目的内容。第二个输入项类似于 -"Assault"、"Theft"、"Burglary" 等。 用户只能从第一个输入中选择一个项目,从第二个输入中选择多个项目。 所以基本上,如果我从第一个输入中选择 Jan,从第二个输入中选择 "Assault","Theft",则应该显示一个条形图,描述 1 月的攻击和盗窃次数。

输入数据框如下所示 PrimaryType Month count Assault Jan 25 Burglary Jan 30 Tresspass Feb 23 Assault Feb 12 Burglary Feb 34

ui <- fluidPage(


 titlePanel(div(HTML("<em> Crime Rate in Chichago </em>"))),

  tabsetPanel(



  tabPanel(" Frequency of Crime ",
         sidebarLayout(

           sidebarPanel(

             #First Input#

             selectInput(inputId = "Month",
                         label = " Choose a Month",
                         choices = unique(crime$Month))),

           #Second input#
           selectInput(inputId = "Crime",
                       label = " Choose among Crime",
                       choices = unique(crime$`Primary Type`),multiple = 
TRUE)),

         #Output#

           mainPanel = (plotOutput("view")
           )
         )
  )
  )


  #Shiny app -Server#
server <- function(input, output) {
  output$view <- renderPlot({
  Monthfilter <- a[a$Month==input$Month,]

crimefilter <- Monthfilter[Monthfilter$`Primary Type` %in% input$Crime,]

ggplot(crimefilter, aes(`Primary Type`,c))+geom_bar(stat="identity")
  })
}

#Shinyapp#
shinyApp(ui = ui, server = server)

我想要一个包含多种主要犯罪类型的特定月份的条形图

以后,尝试在您的代码中提供一些示例数据,这样就不必重现了。

您的代码中存在一些错误:

  • mainPanel 应位于 sidebarLayout
  • 您的数据集是 'crime' 而不是 'a',因为您在绘图输出 (a[a$Month==input$Month,])
  • 您可能在数据集中将列 header 设置为 'PrimaryType',但您在代码中将其引用为 'Primary Type'(带有 space)
crime = data.table('Primary Type' = c('Assault','Burglary', 'Tresspass', 'Assault','Burglary'),
                   Month = c('Jan', 'Jan', 'Feb','Feb','Feb'),
                   Count = c(12,13,43,54,11))

ui <- fluidPage(


  titlePanel(div(HTML("<em> Crime Rate in Chichago </em>"))),

  tabsetPanel(



    tabPanel(" Frequency of Crime ",
             sidebarLayout(

               sidebarPanel(
                 #First Input#

                 selectInput(inputId = "Month",
                             label = " Choose a Month",
                             choices = unique(crime$Month)),

                 #Second input#
                 selectInput(inputId = "Crime",
                             label = " Choose among Crime",
                             choices = unique(crime$`Primary Type`),
                             multiple = TRUE)
                 ),

               #Output#

               mainPanel(
                 plotOutput("bar_plot")
               )

              )


    )
  )
)


#Shiny app -Server#
server <- function(input, output) {

  output$bar_plot <- renderPlot({
    Monthfilter <- crime[crime$Month == input$Month,]
    print('hello')
    crimefilter <- Monthfilter[Monthfilter$`Primary Type` %in% input$Crime,]

    ggplot(data = crimefilter, aes(x = `Primary Type`, y = Count)) + geom_bar(stat="identity")
  })
}

#Shinyapp#
shinyApp(ui = ui, server = server)r)