Skip to content

Instantly share code, notes, and snippets.

@briatte
Forked from chrishanretty/minority_report.R
Created June 20, 2017 21:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save briatte/a03f82ce3f495d18ed4bb852f4a38b56 to your computer and use it in GitHub Desktop.
Save briatte/a03f82ce3f495d18ed4bb852f4a38b56 to your computer and use it in GitHub Desktop.
Get stats on minority government from ParlGov
library(tidyverse)
### Make sure to download files from www.parlgov.org!
elec <- read.csv("view_election.csv")
cab <- read.csv("view_cabinet.csv")
party <- read.csv("view_party.csv")
### Date
cab$start_date <- as.Date(cab$start_date)
### Filter to post-1992 cabinets
cab <- subset(cab, start_date > as.Date("1992-01-01"))
nUnique <- length(unique(cab$cabinet_id))
### For each cabinet, get whether minority or not
cab <- cab %>%
group_by(cabinet_id) %>%
mutate(cabinet_seats = sum(seats[which(cabinet_party == 1)], na.rm = TRUE),
isMinority = cabinet_seats < 0.5 * election_seats_total)
### What proportion of cabinets are minority cabinets?
min_pct <- cab %>%
distinct(cabinet_id, isMinority) %>%
ungroup() %>%
summarize(percentage = mean(isMinority))
min_pct2 <- cab %>%
filter(caretaker == 0) %>%
distinct(cabinet_id, isMinority) %>%
ungroup() %>%
summarize(percentage = mean(isMinority))
### Of these, what proportion are single party?
min_nparties <- cab %>%
filter(isMinority == TRUE & cabinet_party == 1) %>%
distinct(cabinet_id, party_id) %>%
group_by(cabinet_id) %>%
summarize(nParties = length(unique(party_id))) %>%
group_by(nParties) %>%
summarize(n = n()) %>%
mutate(freq = n / sum(n))
### What about their duration?
### We need first to create a duration variable
### See https://gist.github.com/hdigital/9bdca6a2f605a27d5d28ca90b7752759
cab_dur <- cab %>%
mutate(start_date = as.Date(start_date)) %>%
select(cabinet_id, previous_cabinet_id, start_date) %>%
distinct
cab_dur <- cab_dur %>%
inner_join(cab_dur, by = c('cabinet_id' = 'previous_cabinet_id')) %>%
mutate(duration = start_date.y - start_date.x) %>%
select(cabinet_id, duration)
cab <- cab %>% left_join(cab_dur)
min_durat <- cab %>%
distinct(isMinority, cabinet_id, duration) %>%
group_by(isMinority) %>%
summarize(n = n(),
meanDurat = mean(duration, na.rm = TRUE),
OverFour = sum(duration > 365.25 * 4, na.rm = TRUE))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment