TidyTuesday
    • About TidyTuesday
    • Datasets
      • 2025
      • 2024
      • 2023
      • 2022
      • 2021
      • 2020
      • 2019
      • 2018
    • Useful links

    On this page

    • UN Votes
      • Get the data here
      • Data Dictionary
    • unvotes.csv
    • roll_calls.csv
    • issues.csv
      • Cleaning Script

    Logo for the United Nations

    UN Votes

    The data this week comes from Harvard’s Dataverse by way of Mine Çetinkaya-Rundel, David Robinson, and Nicholas Goguen-Compagnoni.

    Original Data citation:
    > Citation: Erik Voeten “Data and Analyses of Voting in the UN General Assembly” Routledge Handbook of International Organization, edited by Bob Reinalda (published May 27, 2013). Available at SSRN: http://ssrn.com/abstract=2111149

    The {unvotes} R package is on CRAN! Github link

    This is a wrapper around the datasets, although I’ve included them as CSVs in the TidyTuesday repo.

    Get package from CRAN:

    install.packages("unvotes")

    Mine Çetinkaya-Rundel wrote about the process of updating the package on the Citizen Statistician blog.

    Get the data here

    # Get the Data
    
    # Read in with tidytuesdayR package 
    # Install from CRAN via: install.packages("tidytuesdayR")
    # This loads the readme and all the datasets for the week of interest
    
    # Either ISO-8601 date or year/week works!
    
    tuesdata <- tidytuesdayR::tt_load('2021-03-23')
    tuesdata <- tidytuesdayR::tt_load(2021, week = 13)
    
    unvotes <- tuesdata$unvotes
    
    # Or read in the data manually
    
    unvotes <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2021/2021-03-23/unvotes.csv')
    roll_calls <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2021/2021-03-23/roll_calls.csv')
    issues <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2021/2021-03-23/issues.csv')

    Data Dictionary

    unvotes.csv

    variable class description
    rcid double The roll call id; used to join with un_votes and un_roll_call_issues
    country character Country name, by official English short name
    country_code character 2-character ISO country code
    vote integer Vote result as a factor of yes/abstain/no

    roll_calls.csv

    variable class description
    rcid integer .
    session double Session number. The UN holds one session per year; these started in 1946
    importantvote integer Whether the vote was classified as important by the U.S. State Department report “Voting Practices in the United Nations”. These classifications began with session 39
    date double Date of the vote, as a Date vector
    unres character Resolution code
    amend integer Whether the vote was on an amendment; coded only until 1985
    para integer Whether the vote was only on a paragraph and not a resolution; coded only until 1985
    short character Short description
    descr character Longer description

    issues.csv

    variable class description
    rcid integer The roll call id; used to join with unvotes and un_roll_calls
    short_name character Two-letter issue codes
    issue integer Descriptive issue name

    Cleaning Script

    The data cleaning can be found in the data-raw folder of the package.

    library(dplyr)
    library(readxl)
    library(countrycode)
    library(tidyr)
    library(forcats)
    
    vlevels <- c("yes", "abstain", "no")
    
    load("data-raw/UNVotes2021.RData")
    
    un_votes <- completeVotes %>%
      filter(vote <= 3) %>%
      mutate(
        country = countrycode(ccode, "cown", "country.name"),
        country_code = countrycode(ccode, "cown", "iso2c"),
        # Match based on old version of data from unvotes package
        country_code = case_when(
          country == "Czechoslovakia" ~ "CS",
          country == "Yugoslavia" ~ "YU",
          country == "German Democratic Republic" ~ "DD",
          country == "Yemen People's Republic" ~ "YD",
          TRUE ~ country_code
        ),
        country = if_else(!is.na(Countryname) & Countryname == "German Federal Republic", "Federal Republic of Germany", country)
      ) %>%
      select(rcid, country, country_code, vote) %>%
      mutate(vote = as.character(vote)) %>%
      mutate(vote = fct_recode(vote, yes = "1", abstain = "2", no = "3"))
    
    descriptions <- completeVotes %>%
      select(session, rcid, abstain, yes, no, importantvote, date, unres, amend, para, short, descr, me, nu, di, hr, co, ec) %>%
      distinct(rcid, .keep_all = TRUE)
    
    un_roll_calls <- descriptions %>%
      select(rcid, session, importantvote:descr) %>%
      mutate(rcid = as.integer(rcid),
             date = as.Date(date)) %>%
      arrange(rcid)
    
    un_roll_call_issues <- descriptions %>%
      select(rcid, me:ec) %>%
      gather(short_name, value, me:ec) %>%
      mutate(rcid = as.integer(rcid),
             value = as.numeric(value)) %>%
      filter(value == 1) %>%
      select(-value) %>%
      mutate(issue = fct_recode(short_name,
                                "Palestinian conflict" = "me",
                                "Nuclear weapons and nuclear material" = "nu",
                                "Colonialism" = "co",
                                "Human rights" = "hr",
                                "Economic development" = "ec",
                                "Arms control and disarmament" = "di"))

    See Mine Çetinkaya-Rundel who wrote about the process of updating the package on the Citizen Statistician blog.