使用 Shiny 按状态显示条形图

Use Shiny to display bar graph by state

我正在尝试使用 shiny 为通过下拉框选择的状态创建条形图。我是 R 的新手,我尝试了各种示例都无济于事。我有三个变量(state、claim #、total $),每个州有五个值。所以像这样:

state <- c("PA", "TX", "NY")
claim_num <- c(1:15)
total <- sample(1000:5000, 15)
df <- (state, claim_num, total)

我想要类似于 https://beta.rstudioconnect.com/jjallaire/shiny-embedding/#inline-app 的东西,但我不知道我是否可以格式化我的数据,因为我会有很多 NA。

你的意思是这样的吗(你可以下载和运行例子)?

library(shiny)

ui <- shinyUI(
  fluidPage(
   titlePanel("Sample Shiny App"),       
   sidebarLayout(
      sidebarPanel(
         uiOutput("stateInput")
      ),
      mainPanel(
         plotOutput("statePlot")
      )
   )
))

server <- shinyServer(function(input, output) {
   state <- sample(state.abb, 3, replace = FALSE)
   total <- sample(1000:5000, 15)
   claimNumber <- 1:15
   data <- data.frame(state, total, claimNumber)

   output$stateInput <- renderUI({
     selectInput(
       inputId = "state",
       label = "Select a State:",
       choices = levels(data$state)
     )
   })

   output$statePlot <- renderPlot({
     hist(data$total[data$state == input$state])
   })
})

shinyApp(ui = ui, server = server)

我们正在做的是获取我们数据框中可用的唯一状态列表,并将它们传递给我们的 selectInput,在 UI 中呈现为下拉列表。从这里,我们可以访问用户通过 input$state 对象选择的任何值。更一般地说,我们可以根据我们定义的 inputId 来访问输入(在这种特殊情况下,我们称之为 state)。

获取用户输入后,我们可以将数据框子集化为仅对应于用户定义状态的 return 值,在这种情况下,将这些总值传递给我们渲染的绘图作为输出。