The script below is a complete data analysis of the 2016 US presidential election. Your job is to (i) understand what the code is doing, and (ii) convert the script into an R markdown document.

# County-level Data for 2016 Presidential Elections

# This is an analysis of US presidential elections data for 2016 at the county level. 
# Since only a small percentage of votes went to independent candidates, we will only 
# compare Democrat and Republican voteshare.
# The data for this analysis is taken from 
# https://github.com/tonmcg/County_Level_Election_Results_12-16.

#####
# DATA IMPORT AND CHECKING
#####
library(tidyverse)
library(knitr)

df <- read_csv("http://web.stanford.edu/class/stats32/assets/lecture-2/2016-presidential-election-county-results.csv")
head(df)

# check no. of rows: matches no. of counties in US
# (Source: http://www.snopes.com/trump-won-3084-of-3141-counties-clinton-won-57/ and http://www.wnd.com/2016/12/trumps-landslide-2623-to-489-among-u-s-counties/)
nrow(df)

# dataset columns
# - `per_dem` and `per_gop` refer to the percentage of votes going to Democrats 
# and Republicans respectively.
# - `diff` represents the absolute difference between Republican votes - Democrat votes.
# - `per_point_diff` represents this difference as a percentage of total votes.
# - `combined_fips` is a 5-digit code identifying the county.
# (From https://en.wikipedia.org/wiki/FIPS_county_code: The FIPS county code is 
# a five-digit Federal Information Processing Standards (FIPS) code (FIPS 6-4) 
# which uniquely identifies counties and county equivalents in the United States, 
# certain U.S. possessions, and certain freely associated states.)
names(df)

# Since we are interested in whether a given county had more Republican or 
# Democrat votes, we have to recompute the `diff` and `per_point_diff` columns.
# `diff` and `per_point_diff` will be positive if there are more Republican votes 
# than Democrat votes (and vice versa).
df <- df %>% mutate(diff = gop - dem,
                    per_point_diff = diff / total * 100)

#####
# SUMMARY STATISTICS
#####
# percentage of popular vote won by each party: Clinton actually wins!
paste0("Republican % of popular vote: ", 
       round(sum(df$gop) / sum(df$total) * 100, digits = 1),
       "%")
paste0("Democrat % of popular vote: ", 
       round(sum(df$dem) / sum(df$total) * 100, digits = 1),
       "%")

# number of counties won by each party: Trump wins by a lot
# hypothesis 1: Margin of victory was slimmer in the counties that Trump won 
# compared with the counties that Clinton won.
# hypothesis 2: Clinton won in counties with large populations
df %>% transmute(gop_won = gop > dem) %>%
    summarize(gop_won = sum(gop_won))

#####
# HISTOGRAMS
#####
# Test hypothesis 1: histogram of the `per_point_diff`
# Not true that Trump had narrower margins of victory
ggplot() +
    geom_histogram(data = df, mapping = aes(x = per_point_diff)) + 
    labs(title = "Histogram of % vote margin", 
         x = "% Republicans won by", y = "Frequency")

# Test hypothesis 2: histogram of `diff`
# Completely different picture! Note the x-axis scale
ggplot() +
    geom_histogram(data = df, mapping = aes(x = diff)) + 
    labs(title = "Histogram of absolute vote margin", 
         x = "No. of votes Republicans won by", y = "Frequency")

# show top 50 counties with largest absolute vote difference
# top 45 counties with largest absolute vote difference were all won by Clinton 
# number 46 was Montgomery, TX, which went to Trump
df %>% select(State = state, County = county, diff) %>%
    mutate(abs_diff = abs(diff)) %>%
    arrange(desc(abs_diff)) %>%
    select(State, County, `Vote difference` = diff) %>%
    head(n = 50) %>%
    kable()

#####
# CONCLUSION
#####
# When analyzing elections, we have to examine the data from many different 
# perspectives in order to get the full story.