Recent academic research concerning the timing of voter registration and turnout (Shino and Smith, 2018) has demonstrated that voters who register to vote near an election are more likely to vote in that election. Still undetermined, however, is what motivates U.S. citizens to register to vote. One prominent theory is that people who register to vote around election time do so because they see the election, or the key issues being debated, as important. This relates to the cost-benefit analysis of voting behavior: when citizens turn out to vote, they see the benefits of voting as outweighing the time and resources required to vote. Are these voters more likely to register to a political party than those registering at other times due to an increased interest in the topics at stake? The goal of this project is to determine how the number of registrants who register with a political party affiliation varies over an election cycle. The hypothesis is that those who register to vote near an election date are more likely to choose a party affiliation than those who register at other times. A second hypothesis is that younger registrants will be less likely to proclaim a party affiliation than older registrants.
The Florida voter file is public information under the law and accessible by request of the Florida Division of Elections. The deadline to register to vote in an upcoming election is 29 days prior to the election date. However, due to the impact of Hurricane Matthew in 2016, the registration deadline was moved from October 10th to October 18th. Florida also has closed primaries, meaning that in order to vote in a party’s primary election, a voter must be registered under that party’s affiliation. This will be important to note when examining party registration over a calendar year, as a decrease in the number of unaffiliated voters registering before a primary is to be expected.
North Carolina has a free, accessible voter file that is updated often on its elections website. The deadline to register to vote in an election in North Carolina is 25 days prior to the election date. This state was also affected by Hurricane Matthew, and in 2016, some counties had their registration deadline extended from October 14th to the 19th. North Carolina has semi-closed primaries: if a voter is registered as unaffiliated with a party, he or she may choose which primary to vote in (but may only choose one). Finally, it is important to note that North Carolina allows same-day registration during their early voting period, which usually occurs throughout a few weeks prior to Election Day.
By the end of my project, I had to load in the following packages, excluding the packages needed for GIS data (which I’ll get to later):
library(tidyverse)
library(plyr)
library(dplyr)
library(lubridate)
library(eeptools)
library(tibbletime)
library(grid)
library(gridExtra)
I then loaded in my data files and altered the variables to fit my analysis; for example, by making sure the dates were in a consistent format, creating new variables such as “month” and “age group,” and factoring some variables:
setwd("~/Desktop/POS4931 Project")
ncvoter<-read.csv("ncvoterfile2019.csv")
ncvoter$registr_dt<-ymd(ncvoter$registr_dt)
ncvoter<-ncvoter %>% group_by(month=floor_date(registr_dt, "month"))
ncvoter$party_cd<-revalue(ncvoter$party_cd, c("CST"="OTH", "GRE"="OTH", "LIB"="OTH"))
ncvoter$party_cd <- factor(ncvoter$party_cd, levels=c("OTH", "DEM", "REP", "UNA"))
ncvoter <- filter(ncvoter, birth_age>=18, birth_age<=100)
labs<-c(paste(seq(18, 81, by = 8), seq(18 + 8 - 1, 82-1, by = 8), sep = "-"), paste(82, "+", sep = ""))
ncvoter$age_group <- cut(ncvoter$birth_age, breaks = c(seq(18, 82, by = 8), Inf), labels = labs, right = FALSE)
ncvoter<-filter(ncvoter, voter_status_reason_desc!=c("DECEASED"))
flvoter<-read.csv("floridavoterfile2019.csv")
flvoter$reg_date<-ymd(flvoter$reg_date)
flvoter<-flvoter %>% group_by(month=floor_date(reg_date, "month"))
flvoter$party_cd<-revalue(flvoter$party_cd, c("CPF"="OTH", "ECO"="OTH", "GRE"="OTH", "IND"="OTH", "LPF"="OTH", "PSL"="OTH", "REF"="OTH"))
flvoter$party_cd <- factor(flvoter$party_cd, levels=c("OTH", "DEM", "REP", "NPA"))
flvoter <- filter(flvoter, birth_age>=18, birth_age<=100)
labs<-c(paste(seq(18, 81, by = 8), seq(18 + 8 - 1, 82-1, by = 8), sep = "-"), paste(82, "+", sep = ""))
flvoter$age_group <- cut(flvoter$birth_age, breaks = c(seq(18, 82, by = 8), Inf), labels = labs, right = FALSE)
colors <- c("blanchedalmond", "royalblue2","firebrick2","darkorchid3")
I first wanted to test if party registration proportions vary according to month. It is already well-documented that during the month of an election deadline, the number of voters registering increases greatly. For example, here’s the voter registration by month in 2016 and 2018 in Florida and North Carolina:
flvoter2016 <- filter(flvoter, reg_date>=as.Date("2016-01-01"), reg_date<=as.Date("2016-12-31"))
flvotermonth2016 <- ggplot(data = flvoter2016) + geom_bar(aes(x = month), stat="count") + labs(title = "Voter Registration by Month", subtitle = "Florida, 2016", x = "Month", y = "Voters Registered")
ncvoter2016 <- filter(ncvoter, registr_dt>=as.Date("2016-01-01"), registr_dt<=as.Date("2016-12-31"))
ncvotermonth2016 <- ggplot(data = ncvoter2016) + geom_bar(aes(x = month), stat="count") + labs(title = "Voter Registration by Month", subtitle = "North Carolina, 2016", x = "Month", y = "Voters Registered")
flvoter2018 <- filter(flvoter, reg_date>=as.Date("2018-01-01"), reg_date<=as.Date("2018-12-31"))
flvotermonth2018 <- ggplot(data = flvoter2018) + geom_bar(aes(x = month), stat="count") + labs(title = "Voter Registration by Month", subtitle = "Florida, 2018", x = "Month", y = "Voters Registered")
ncvoter2018 <- filter(ncvoter, registr_dt>=as.Date("2018-01-01"), registr_dt<=as.Date("2018-12-31"))
ncvotermonth2018 <- ggplot(data = ncvoter2018) + geom_bar(aes(x = month), stat="count") + labs(title = "Voter Registration by Month", subtitle = "North Carolina, 2018", x = "Month", y = "Voters Registered")
grid.arrange(flvotermonth2016, ncvotermonth2016, flvotermonth2018, ncvotermonth2018, nrow = 2, ncol = 2)
As can be seen, the number of new registrations spikes in the months before primary and general elections. Next, I created fill charts displaying the proportion of new registrants that belonged to each party (DEM stands for Democrat, REP stands for Republican, NPA/UNA stands for No Party Affiliation/Unaffiliated, and OTH means the voter registered for a party that was not one of the other three):
ncpartyregmonth2016 <- ggplot(data = ncvoter2016) + geom_bar(mapping = aes(x = month, fill = party_cd), position = "fill") + scale_fill_manual(values = colors) + labs(title="Party Registration by Month", subtitle="North Carolina, 2016", x="Month", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
flpartyregmonth2016 <- ggplot(data = flvoter2016) + geom_bar(mapping = aes(x = month, fill = party_cd), position = "fill") + scale_fill_manual(values = colors) + labs(title="Party Registration by Month", subtitle="Florida, 2016", x="Month", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
ncpartyregmonth2018 <- ggplot(data = ncvoter2018) + geom_bar(mapping = aes(x = month, fill = party_cd), position = "fill") + scale_fill_manual(values = colors) + labs(title="Party Registration by Month", subtitle="North Carolina, 2018", x="Month", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
flpartyregmonth2018 <- ggplot(data = flvoter2018) + geom_bar(mapping = aes(x = month, fill = party_cd), position = "fill") + scale_fill_manual(values = colors) + labs(title="Party Registration by Month", subtitle="Florida, 2018", x="Month", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
grid.arrange(flpartyregmonth2016, ncpartyregmonth2016, flpartyregmonth2018, ncpartyregmonth2018, nrow = 2, ncol = 2)
Since Florida has closed primary elections, it makes sense that the proportion of voters registering as unaffiliated with a party decreases during the month of the primary election registration deadline (February in 2016 and July in 2018). In North Carolina, however, we see these unaffiliated decreases during both of the actual election months in 2016 (March and November), and in the general election month in 2018. Could it be possible that partisan registration increases during the one-stop early voting period in North Carolina, rather than before the actual registration deadline?
After noticing this discrepancy, I decided to map out party registration by day in Fall 2016 and Fall 2018. Even though I only noticed the drop in unaffiliated registrants in North Carolina, I did this in Florida as well in case any other patterns were apparent. In the graphs below, the first line marks the day of the registration deadline and the second line marks the election date.
ncvoter2016election<-filter(ncvoter, registr_dt>=as.Date("2016-09-13"), registr_dt<=as.Date("2016-11-22"))
ncvoter2016day<-ggplot(data = ncvoter2016election) + geom_bar(aes(x = registr_dt), stat="count") + labs(title = "Voter Registration by Day", subtitle = "North Carolina, Fall 2016", x = "Date", y = "Voters Registered") + geom_vline(xintercept = as.Date("2016-10-14"), linetype="dashed", color = "red") + geom_vline(xintercept = as.Date("2016-11-08"), linetype="dashed", color = "purple")
flvoter2016election<-filter(flvoter, reg_date>=as.Date("2016-09-13"), reg_date<=as.Date("2016-11-22"))
flvoter2016day<-ggplot(data = flvoter2016election) + geom_bar(aes(x = reg_date), stat="count") + labs(title = "Voter Registration by Day", subtitle = "Florida, Fall 2016", x = "Date", y = "Voters Registered") + geom_vline(xintercept = as.Date("2016-10-18"), linetype="dashed", color = "red") + geom_vline(xintercept = as.Date("2016-11-08"), linetype="dashed", color = "purple")
ncvoter2018election<-filter(ncvoter, registr_dt>=as.Date("2018-09-11"), registr_dt<=as.Date("2018-11-20"))
ncvoter2018day<-ggplot(data = ncvoter2018election) + geom_bar(aes(x = registr_dt), stat="count") + labs(title = "Voter Registration by Day", subtitle = "North Carolina, Fall 2018", x = "Date", y = "Voters Registered") + geom_vline(xintercept = as.Date("2018-10-12"), linetype="dashed", color = "red") + geom_vline(xintercept = as.Date("2018-11-06"), linetype="dashed", color = "purple")
flvoter2018election<-filter(flvoter, reg_date>=as.Date("2018-09-11"), reg_date<=as.Date("2018-11-20"))
flvoter2018day<-ggplot(data = flvoter2018election) + geom_bar(aes(x = reg_date), stat="count") + labs(title = "Voter Registration by Day", subtitle = "Florida, Fall 2018", x = "Date", y = "Voters Registered") + geom_vline(xintercept = as.Date("2018-10-09"), linetype="dashed", color = "red") + geom_vline(xintercept = as.Date("2018-11-06"), linetype="dashed", color = "purple")
grid.arrange(flvoter2016day, ncvoter2016day, flvoter2018day, ncvoter2018day, nrow = 2, ncol = 2)
As can be seen in the graphs of voter registration by day, new registration spikes occurred on the day of the registration deadline as well as on Election Day. This corresponds to the idea that election-related stimuli encourage people to register to vote. (Note: The unmarked peak in registration in Florida in 2016 was likely because Florida moved its registration deadline due to Hurricane Matthew).
ncpartyregday2016<-ggplot(data = ncvoter2016election) + geom_bar(mapping = aes(x = registr_dt, fill = party_cd), binwidth = 1, position = "fill") + scale_fill_manual(values = colors) + labs(title="Party Registration by Day", subtitle="North Carolina, Fall 2016", x="Day", y="Proportion of Total") + guides(fill=guide_legend(title="Party")) + geom_vline(xintercept = as.Date("2016-10-14"), linetype="dashed", color = "black") + geom_vline(xintercept = as.Date("2016-11-08"), linetype="dashed", color = "black")
flpartyregday2016<-ggplot(data = flvoter2016election) + geom_bar(mapping = aes(x = reg_date, fill = party_cd), binwidth = 1, position = "fill") + scale_fill_manual(values = colors) + labs(title="Party Registration by Day", subtitle="Florida, Fall 2016", x="Day", y="Proportion of Total") + guides(fill=guide_legend(title="Party")) + geom_vline(xintercept = as.Date("2016-10-18"), linetype="dashed", color = "black") + geom_vline(xintercept = as.Date("2016-11-08"), linetype="dashed", color = "black")
ncpartyregday2018<-ggplot(data = ncvoter2018election) + geom_bar(mapping = aes(x = registr_dt, fill = party_cd), binwidth = 1, position = "fill") + scale_fill_manual(values = colors) + labs(title="Party Registration by Day", subtitle="North Carolina, Fall 2018", x="Day", y="Proportion of Total") + guides(fill=guide_legend(title="Party")) + geom_vline(xintercept = as.Date("2018-10-12"), linetype="dashed", color = "black") + geom_vline(xintercept = as.Date("2018-11-06"), linetype="dashed", color = "black")
flpartyregday2018<-ggplot(data = flvoter2018election) + geom_bar(mapping = aes(x = reg_date, fill = party_cd), binwidth = 1, position = "fill") + scale_fill_manual(values = colors) + labs(title="Party Registration by Day", subtitle="Florida, Fall 2018", x="Day", y="Proportion of Total") + guides(fill=guide_legend(title="Party")) + geom_vline(xintercept = as.Date("2018-10-09"), linetype="dashed", color = "black") + geom_vline(xintercept = as.Date("2018-11-06"), linetype="dashed", color = "black")
grid.arrange(flpartyregday2016, ncpartyregday2016, flpartyregday2018, ncpartyregday2018, nrow = 2, ncol = 2)
The party registration seems somewhat random in Florida, likely due to some days having a smaller number of registrations. However, in North Carolina, one can see that the proportion of people registering as unaffiliated drops around election time, particularly between the registration deadline and the election date. This is consistent with what was seen in the graphs of party registration by month and agrees with the idea that people who register at one-stop early voting could be more likely to affiliate with a political party.
As voters age, their party ties grow stronger, even in states like North Carolina where one does not need to be affiliated with a party to vote in the primaries. I graphed age versus party affiliation in Florida and North Carolina to show this relationship:
ncage<-ggplot(data = ncvoter) + geom_histogram(mapping = aes(x = birth_age, fill = party_cd), position = "fill", binwidth=1) + scale_fill_manual(values = colors) + labs(title="Party Registration by Age", subtitle="2019 North Carolina Voter File", x="Age", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
flage<-ggplot(data = flvoter) + geom_histogram(mapping = aes(x = birth_age, fill = party_cd), position = "fill", binwidth=1) + scale_fill_manual(values = colors) + labs(title="Party Registration by Age", subtitle="2019 Florida Voter File", x="Age", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
grid.arrange(flage, ncage, ncol = 2)
Thus, it is necessary to group by age and reexamine the relationship between registration timing and party affiliation we saw above.
ncregage2016<-ggplot(data = ncvoter2016election) + geom_bar(aes(x = registr_dt), stat="count") + labs(title = "Voter Registration by Day, Grouped by Age", subtitle = "North Carolina, Fall 2016", x = "Date", y = "Voters Registered") + facet_wrap(~ age_group, ncol=3) + theme(axis.text.x = element_text(angle = 90)) + geom_vline(xintercept = as.Date("2016-10-14"), linetype="dashed", color = "red", size = 0.5) + geom_vline(xintercept = as.Date("2016-11-08"), linetype="dashed", color = "purple", size = 0.5)
flregage2016<-ggplot(data = flvoter2016election) + geom_bar(aes(x = reg_date), stat="count") + labs(title = "Voter Registration by Day, Grouped by Age", subtitle = "Florida, Fall 2016", x = "Date", y = "Voters Registered") + facet_wrap(~ age_group, ncol=3) + theme(axis.text.x = element_text(angle = 90)) + geom_vline(xintercept = as.Date("2016-10-18"), linetype="dashed", color = "red", size = 0.5) + geom_vline(xintercept = as.Date("2016-11-08"), linetype="dashed", color = "purple", size = 0.5)
grid.arrange(flregage2016, ncregage2016, ncol = 2)
As can be seen above, not only does the youngest age group make up the largest group of new registrants in 2016 in both Florida and North Carolina, but also the “peaks” on the registration deadline and on Election Day are more exaggerated in younger groups. Now, let’s examine party registration by day, grouped by age:
ncpartyage2016<-ggplot(data = ncvoter2016election) + geom_histogram(mapping = aes(x = registr_dt, fill = party_cd), position = "fill", binwidth = 3) + scale_fill_manual(values = colors) + labs(title="Party Registration by Date", subtitle="North Carolina, Fall 2016", x="Date", y="Proportion of Total") + guides(fill=guide_legend(title="Party")) + facet_wrap(~ age_group, ncol=3) + theme(axis.text.x = element_text(angle = 90)) + geom_vline(xintercept = as.Date("2016-10-14"), linetype="dashed", color = "black", size = 0.5) + geom_vline(xintercept = as.Date("2016-11-08"), linetype="dashed", color = "black", size = 0.5)
flpartyage2016<-ggplot(data = flvoter2016election) + geom_bar(mapping = aes(x = reg_date, fill = party_cd), position = "fill", binwidth = 3) + scale_fill_manual(values = colors) + labs(title="Party Registration by Date", subtitle="Florida, Fall 2016", x="Date", y="Proportion of Total") + guides(fill=guide_legend(title="Party")) + facet_wrap(~ age_group, ncol=3) + theme(axis.text.x = element_text(angle = 90)) + geom_vline(xintercept = as.Date("2016-10-18"), linetype="dashed", color = "black", size = 0.5) + geom_vline(xintercept = as.Date("2016-11-08"), linetype="dashed", color = "black", size = 0.5)
grid.arrange(flpartyage2016, ncpartyage2016, ncol = 2)
There doesn’t seem to be any noticeable patterns here, other than that the dip in unaffiliated registration between the registration deadline and the election date in North Carolina is more pronounced in younger age groups. However, this is expected since the younger age groups have more observations than the older age groups.
After seeing a large number of young voters registering around election time, I wondered if the proportions of party registration by age of those registering during election years were different from the proportions across all times.
ncage2016<-ggplot(data = ncvoter2016) + geom_histogram(mapping = aes(x = birth_age, fill = party_cd), position = "fill", binwidth=1) + scale_fill_manual(values = colors) + labs(title="Party Registration by Age", subtitle="North Carolina, 2016", x="Age", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
flage2016<-ggplot(data = flvoter2016) + geom_histogram(mapping = aes(x = birth_age, fill = party_cd), position = "fill", binwidth=1) + scale_fill_manual(values = colors) + labs(title="Party Registration by Age", subtitle="Florida, 2016", x="Age", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
ncage2018<-ggplot(data = ncvoter2018) + geom_histogram(mapping = aes(x = birth_age, fill = party_cd), position = "fill", binwidth=1) + scale_fill_manual(values = colors) + labs(title="Party Registration by Age", subtitle="North Carolina, 2018", x="Age", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
flage2018<-ggplot(data = flvoter2018) + geom_histogram(mapping = aes(x = birth_age, fill = party_cd), position = "fill", binwidth=1) + scale_fill_manual(values = colors) + labs(title="Party Registration by Age", subtitle="Florida, 2018", x="Age", y="Proportion of Total") + guides(fill=guide_legend(title="Party"))
grid.arrange(flage2016, ncage2016, flage2018, ncage2018, nrow = 2, ncol = 2)
It does seem as though in 2016, especially in Florida, the slope of the proportion of unaffiliated voters versus age is slightly different. The youngest voters have lower numbers of unaffiliated voters than some older ages between 20 and 45. However, this data contains a voter’s current age in 2019, so it could be that preregistered voters are less likely to register as unaffiliated than some older ages. I found much of the same in 2018, except now the ages are more accurate. An alternate explanation might be that voter registration drives on college campuses encourage students to register with a certain party affiliation, which I will now examine using GIS.
I decided to map the proportion of unaffiliated voters by county in North Carolina to see if the areas with lower proportions of unaffiliated voters were college towns. I also plotted the eight most populated universities in North Carolina for reference.
library(sp)
library(raster)
library(rgdal)
nccounty <- readOGR("tl_2019_37_county10.shp")
setClass("num.with.commas")
setAs("character", "num.with.commas", function(from) as.numeric(gsub(",", "", from) ) )
nccounty$NAME = toupper(nccounty$NAME)
ncvoternpa <- ncvoter %>% group_by(county_desc, party_cd) %>% dplyr::summarise(n = dplyr::n())
ncvoternpa_new <- aggregate(x = ncvoternpa$n, by = list(ncvoternpa$county_desc), FUN = sum)
ncvoternpa_totals<-merge(ncvoternpa, ncvoternpa_new, by.x="county_desc", by.y="Group.1")
ncvoternpa_totals <- ncvoternpa_totals %>% mutate(Proportion = n / x)
ncvoternpacounty<-filter(ncvoternpa_totals, party_cd=="UNA")
nccounty <- merge(nccounty, ncvoternpacounty, by.x ="NAME", by.y = "county_desc")
library(RColorBrewer)
my.palette <- brewer.pal(n = 7, name = "Purples")
library(sf)
library(raster)
library(dplyr)
library(spData)
library(tmap)
nccolleges <- readOGR("nccolleges.shp")
tm_shape(nccounty) + tm_polygons(col = "Proportion", palette = my.palette) + tm_layout(main.title = "Proportion of Unaffiliated Voters by County", title.size = 0.5, legend.outside=T) + tm_shape(nccolleges) + tm_symbols(col = "black", size = 0.3)
The counties that contain college campuses do not seem to have lower numbers of unaffiliated voters.
Overall, it is clear that the proportion of unaffiliated registrants decreases between the registration deadline and the election date in North Carolina. This could instead be correlated with same-day registration during early voting. Furthermore, young people make up the largest proportion of registrants during election years. They also tend to be unaffiliated, but perhaps the youngest group of registrants (18-20 years old) have less unaffiliated voters than slightly older age groups. Some ideas for further analysis are:
1. Do more registrants join the party of the winning presidential candidate after an election?
2. Are the youngest registrants (i.e. college-aged voters) more likely than those aged 22-26 to choose a party affiliation when registering?
This was my first time working with large datasets in R and it took me some time to learn how to correctly import them and edit them to work with my analysis. In particular, I struggled in working with dates. Initially, R was reading the date columns in as factor variables, so I had to figure out how to parse these columns as date variables and filter them between certain boundaries.
Furthermore, working with ages cause me some trouble. North Carolina includes a voter’s age in its voter file, but Florida does not. I had to find a function (age_calc) to do this for me, and it did not work with the 13 million observations I had gathered into the Florida voter file. I ended up re-downloading the original Florida voter “folder” (which separates out voter files by county) and completing the age_calc operation in each smaller voter file, then consolidating them all again. I did this by running the following code:
setwd("~/Desktop/20190108_VoterDetail")
names<-c("gender","birth_date","reg_date","party_cd")
#Then repeat the following, replacing "county" and "CTY" with corresponding county name and three-letter code:
countyvoter <- read_tsv("CTY_20190108.txt", col_names=FALSE)
countyvoterreg <- select(countyvoter, X20, X22, X23, X24)
colnames(countyvoterreg) <- names
countyvoterreg$birth_date <- as.Date(countyvoterreg$birth_date, "%m/%d/%Y")
countyvoterreg$reg_date <- as.Date(countyvoterreg$reg_date, "%m/%d/%Y")
countyvoterreg <- na.omit(countyvoterreg)
countyvoterreg$birth_age <- age_calc(countyvoterreg$birth_date, as.Date('2018-12-31'), units = "years")
countyvoterreg$birth_age <- round(countyvoterreg$birth_age, digits = 0)
rm(countyvoter)
#Finally, merge all:
flvoter<-do.call("rbind", list(alachuavoterreg,bakervoterreg,bayvoterreg,bradfordvoterreg,brevardvoterreg,browardvoterreg,calhounvoterreg,charvoterreg,citrusvoterreg,clayvoterreg,columbiavoterreg,colvoterreg,dadevoterreg,desotovoterreg,dixievoterreg,duvalvoterreg,escambiavoterreg,flaglervoterreg,franklinvoterreg,gadsdenvoterreg,gilchristvoterreg,gladesvoterreg,gulfvoterreg,hamiltonvoterreg,hardeevoterreg,hendryvoterreg,hernandovoterreg,highlandsvoterreg,hillsvoterreg,holmesvoterreg,indrivvoterreg,jacksonvoterreg,jeffersonvoterreg,lafayettevoterreg,lakevoterreg,leevoterreg,leonvoterreg,levyvoterreg,libertyvoterreg,madisonvoterreg,manateevoterreg,marionvoterreg,martinvoterreg,monroevoterreg,nassauvoterreg,okaloosavoterreg,okeechobeevoterreg,orangevoterreg,osceolavoterreg,palmbchvoterreg,pascovoterreg,pinellasvoterreg,polkvoterreg,putnamvoterreg,santarosavoterreg,sarasotavoterreg,seminolevoterreg,stjohnsvoterreg,stlucievoterreg,sumtervoterreg,suwanneevoterreg,taylorvoterreg,unionvoterreg,volusiavoterreg,wakullavoterreg,waltonvoterreg,washingtonvoterreg))
write.csv(flvoter, file = "floridavoterfile2019.csv")
Shino, Enrijeta, and Daniel A. Smith. “Timing the Habit: Voter Registration and Turnout.” Electoral Studies, vol. 51, 2018, pp. 72–82., doi:10.1016/j.electstud.2017.10.005.