带有条形图年份的滑块

Slider with years for barplot

我正在尝试在我的条形图页面中添加一个滑块,以使每年的数据具有交互性。

#library

library(dplyr)
library(shiny)
library(shinythemes)
library(ggplot2)

#Source
dataset <- read.csv("Wagegap.csv")

SFWage <- dataset %>% 
  group_by(gender,JobTitle, Year) %>%
  summarise(averageBasePay = mean(BasePay, na.rm=TRUE)) %>%
              select(gender, JobTitle, averageBasePay, Year)

clean <- SFWage %>% filter(gender != "")


#UI
ui <- fluidPage(
  
  theme = shinytheme("united"),
  
  navbarPage("San Fransisco Wages",

             tabPanel("Barplot",
                    
                      mainPanel(
                        plotOutput("barplot")
                        
                      )) ,
             tabPanel("Table", 
                      mainPanel(
                        dataTableOutput("table")
                      ))                     
  )
)                       
       
#server
server <- function(input, output){
  
  output$barplot <- renderPlot({
    
    ggplot(clean, aes(x = JobTitle, y = averageBasePay  ))+
    geom_bar(stat="Identity", width = 0.3, fill="orange")+
    labs(x= "Jobs", y = "Wage", title = "Wage per job")
   
})
  
  
  output$table <- renderDataTable({
    clean
    
  })
}
  
  #Run App
  shinyApp(ui = ui, server = server)

我还没有完全理解如何输入这个内容。 我试过将它滑入 navbarpage,但我不知道它是如何工作的。 我也试过让 year 有反应但没有成功。

不是年一定要被动;这是整个数据框。因此,在你的 ui 中,你可以这样做:

[...]
tabPanel("Barplot",
                      
                      mainPanel(
                        sliderInput("year", label = "Which year should be displayed?", min = 1900, max = 2020, step = 5, value = 2000) # new
                        plotOutput("barplot")
                        
                      )) ,
[...]

为了方便,我把它放在那里;布局是你的。我试着尽可能少地改变。

服务器将有:

server <- function(input, output){
  
  # NEW ########################################
  clean <- reactive({
    SFWage <- dataset %>% 
      group_by(gender,JobTitle, Year) %>%
      summarise(averageBasePay = mean(as.numeric(BasePay), na.rm=TRUE)) %>% # Notice the as.numeric()
      select(gender, JobTitle, averageBasePay, Year)
    
    SFWage %>% filter(gender != "" & Year == input$year)
  })
  
  # OLD ########################################
  output$barplot <- renderPlot({
    
    ggplot(clean(), aes(x = JobTitle, y = averageBasePay  ))+ # Parenthesis
      geom_bar(stat="Identity", width = 0.3, fill="orange")+
      labs(x= "Jobs", y = "Wage", title = "Wage per job")
    
  })
  
  
  output$table <- renderDataTable({
    clean() # Parenthesis
    
  })
}

不要忘记添加括号,就像我在这里所做的那样。

这应该可以,但我可能输入错误或完全错误。由于我没有你的数据,我无法测试它。

编辑:根据您的评论,我添加了 as.numeric() 术语,如您在上面所见。但是,如果你的数据不仅不是数字,而且还带有,,你可以这样做:

[...]
      summarise(averageBasePay = mean(as.numeric(gsub(",", ".", BasePay)), na.rm=TRUE)) %>% # Notice the as.numeric() and the gsub()
[...]