使用日期范围闪亮的更新图

问题描述

我正在尝试设置一个日期范围过滤器,该过滤器将更新我的图表,但是无论我如何尝试,我似乎都会出错。基本上,我希望能够设置日期范围,以便人们可以查看特定选举之间的变化。

我正在使用内华达州国务卿韦斯比特的数据进行选民登记。我已经抓取了数据并将其存储在CSV中,如果我能确定该怎么做,我很乐意将其附加在此处。 https://www.nvsos.gov/sos/elections/voters/voter-registration-statistics

通常我会分解一下代码,但是我将所有代码都包含在内,以防万一我在看不见的其他地方出错。

library(tidyverse)
library(shinydashboard)
library(shinyWidgets)
library(tidyverse)
library(scales)
library(plotly)

#### Load Data-----------------------------------------------------------------
nv_data <- read_csv("Data/NV_Data_Clean.csv")    

nv_data <- nv_data %>%
      mutate(Date = lubridate::mdy(Date),Party = factor(Party,levels = c("Total","Democrat","Republican","Nonpartisan","Other")))%>%
      mutate(district = factor(district))
    
    
    ### separate out data by the district types ------------------------------------
    
    
    county <- nv_data %>%
      filter(`district Type` == "County")
    
    assembly <- nv_data %>%
      filter(`district Type` == "Assembly")
    
    senate <- nv_data %>%
      filter(`district Type` == "Senate")
    
    ageparty <- nv_data %>%
      filter(`district Type` == "Age and Party") 
    
    
    
    ### Create function for the date range -----------------------------------------
    
    monthStart <- function(x) {
      x <- as.POSIXlt(x)
      x$mday <- 1
      as.Date(x)
    }
    
    ###  build the components of the UI --------------------------------------------
    sidebar <- dashboardSidebar(
      sidebarMenu(
        #menuItem(text = "Home",tabName = "home"),menuItem(text = "Counties",tabName = "countiesdistricts"),menuItem(text = "Senate districts",tabName = "senatedistricts"),menuItem(text = "Assembly districts",tabName = "assemblydistricts"),menuItem(text = "Age and Party",tabName = "agegroups")
      )
    )
    
    body <- dashboardBody(
      mainPanel(
        tabItems(
          tabItem("countiesdistricts",tabsetPanel(
                    tabPanel(selectInput("county_districtname","Select County",unique(county$district)),daterangeInput("county_daterange","Select Date Ragne: ",format = "mm/yyyy",start = min(county$Date),end = max(county$Date),startview = "year",separator = " - "),# textoutput("countyDates"),# more stuff here
                             plotly::plotlyOutput("countyplot")
                    ))
          ),tabItem("senatedistricts",tabsetPanel(
                    tabPanel(selectInput("senate_districtname","Select district",unique(senate$district)),# daterangeInput("sen_daterange","Select Date Range: ",#                format = "mm/yyyy",#                start = min(senate$Date),#                end = max(senate$Date),#                startview = "year",#                separator = " - "),# textoutput("senateDates"),#more stuff here
                             plotly::plotlyOutput("senplot")
                    ))
          ),tabItem("assemblydistricts",tabsetPanel(
                    tabPanel(selectInput("assembly_districtname",# Set up the tab 
                                         unique(assembly$district)),# daterangeInput("ad_daterange",# textoutput("assemblyDates"),plotly::plotlyOutput("adplot")
                    ))
          ),tabItem("agegroups",tabsetPanel(
                    tabPanel(selectInput("agegroup_districtname","Select Age Group",unique(ageparty$district)),##date range goes here
                             plotly::plotlyOutput("ageplot")
                    ))
          )
        )
      )
    )
    
    
    
    
    ###  Assembly the UI -----------------------------------------------------------
    ui <- dashboardPage(skin = "red",header = dashboardHeader( title = "Nevada Voter Reg Trends"),sidebar = sidebar,body = body
    )#dashboardBody()
    
    
    
    ### Build the Server -----------------------------------------------------------
    server <- function(input,output,session) {
       CNTY <- reactive({
        county %>%
          filter(district == input$county_districtname,Date == input$county_daterange)%>%
          select(-district)
           
      })
      
      SEN <- reactive({
        senate %>%
          filter(district == input$senate_districtname)%>%
          select(-district)
      })
      
      AD <- reactive({
        assembly %>%
          filter(district == input$assembly_districtname)%>%
          select(-district)
        
      })
      AGE <- reactive({
        ageparty %>%
          filter(district == input$agegroup_districtname)%>%
          select(-district)
      })
      
      output$assemblyDates <- renderText({Dates$SelectedDates})
      
      Dates <- reactive()
      observe({
        Dates$SelectedDates <- c(as.character(format(input$county_daterange[1],format = "%m/%Y")),as.character(format(input$county_daterange[2],format = "%m/%Y")))
      })
      
      ### Plotly outputs--------------------------------------------------------------
      #County
      
      output$countyplot <- plotly::renderPlotly({
        
        
        ggplot(CNTY(),aes(x = Date,y = Voters,color = Party,group = Party,label = Percent)) +
          geom_line(size = 1.125) +
          geom_point(size = 2.5)+
          scale_y_continuous(labels = comma) +
          scale_color_manual(values=c("darkgreen","blue","red","orange","darkgray"),name = "Party") +
          labs(x="Dates",y="Voter Registration",title= paste( input$county_districtname,"Voter Registration Trends"),caption = "Data Source: Nevada Secretary of State") +
          theme(
            plot.title = element_text(size = 15,face = "bold"),axis.text.x = element_text(angle = 0),plot.caption = element_text(hjust = -1)
          )
      })
      #Senate
      output$senplot <- plotly::renderPlotly({
        ggplot(SEN(),title= paste( input$senate_districtname,caption =  "Data Sourc: Nevada Secretary of State") +
          theme(
            plot.title = element_text(size = 15,axis.text.x = element_text(angle = 0)
          )
      })
      #AD
      output$adplot <- plotly::renderPlotly({
        ggplot(AD(),title= paste( input$agegroup_districtname,axis.text.x = element_text(angle = 0)
          )
      })
      #Age
      output$ageplot <- plotly::renderPlotly({
        ggplot(AGE(),axis.text.x = element_text(angle = 0)
          )
      })
    }
    
    
    shinyApp(ui = ui,server = server)

解决方法

input$count_dateRange是一个长度为2的向量。在它的下面,您似乎将其视为标量。

  county %>%
      filter(District == input$county_districtname,Date == input$county_dateRange)%>%
      select(-District)