Выбор нескольких входов в Rshiny - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь построить Rshiny для моего проекта. Я пытаюсь включить 2 входа, Первый ввод - это выпадающий список, который содержит месяцы с января по декабрь. Вторым вводом может быть выпадающий список или все, что позволяет мне выбирать несколько элементов. Вторые элементы ввода - что-то вроде - «Нападение», «Кража», «Кража со взломом» и т. Д. Пользователь может выбрать только один элемент из первого ввода и несколько элементов из второго ввода. Итак, в основном, если я выберу Яна из первого ввода и «Нападение», «Кража» со второго ввода должна появиться гистограмма, изображающая число нападений и краж в январе.

Входной фрейм выглядит так 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)

Я бы хотел гистограмму для конкретного месяца с несколькими основными видами преступлений

1 Ответ

0 голосов
/ 01 апреля 2019

В будущем постарайтесь предоставить некоторые примеры данных в своем коде, чтобы их не нужно было воспроизводить.

Вот несколько ошибок в вашем коде:

  • mainPanel должна попадать в боковую панельLayout
  • Ваш набор данных «преступление», а не «a», как вы указали в выводе своего сюжета ([$ Month == input $ Month,])
  • Возможно, вы установили заголовок столбца как «PrimaryType» в своем наборе данных, но вы указали его в своем коде как «Основной тип» (с пробелом)
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)

...