Author: David Robinson
Date: 2021-03-09

# Intro to the unvotes package

#### David Robinson

#### 2021-03-09

This package provides the voting history of countries in the United Nations General Assembly, along with information such as date, description, and topics for each vote.

### Datasets

The unvotes contains three datasets, each data frames (specifically tbl_dfs, which are more convenient to print). First is the history of each country’s vote. These are represented in the `un_votes` dataset, with one row for each country/vote pair:

    library(dplyr)
    library(unvotes)

    un_votes

    ## # A tibble: 869,937 x 4
    ##     rcid country            country_code vote
    ##    <dbl> <chr>              <chr>        <fct>
    ##  1     3 United States      US           yes
    ##  2     3 Canada             CA           no
    ##  3     3 Cuba               CU           yes
    ##  4     3 Haiti              HT           yes
    ##  5     3 Dominican Republic DO           yes
    ##  6     3 Mexico             MX           yes
    ##  7     3 Guatemala          GT           yes
    ##  8     3 Honduras           HN           yes
    ##  9     3 El Salvador        SV           yes
    ## 10     3 Nicaragua          NI           yes
    ## # … with 869,927 more rows

The package also contains a dataset of information about each roll call vote, including the date, description, and relevant resolution that was voted on:

    un_roll_calls

    ## # A tibble: 6,202 x 9
    ##     rcid session importantvote date       unres  amend  para short   descr
    ##    <int>   <dbl>         <int> <date>     <chr>  <int> <int> <chr>   <chr>
    ##  1     3       1             0 1946-01-01 R/1/66     1     0 AMENDM… "TO ADOPT …
    ##  2     4       1             0 1946-01-02 R/1/79     0     0 SECURI… "TO ADOPT …
    ##  3     5       1             0 1946-01-04 R/1/98     0     0 VOTING… "TO ADOPT …
    ##  4     6       1             0 1946-01-04 R/1/1…     0     0 DECLAR… "TO ADOPT …
    ##  5     7       1             0 1946-01-02 R/1/2…     1     0 GENERA… "TO ADOPT …
    ##  6     8       1             0 1946-01-05 R/1/2…     1     0 ECOSOC… "TO ADOPT …
    ##  7     9       1             0 1946-02-05 R/1/3…     0     0 POST-W… "TO OPEN T…
    ##  8    10       1             0 1946-02-05 R/1/3…     1     1 U.N. M… "TO ADOPT …
    ##  9    11       1             0 1946-02-05 R/1/3…     0     0 TRUSTE… "TO ADOPT …
    ## 10    12       1             0 1946-02-06 R/1/3…     1     1 COUNCI… "TO ADOPT …
    ## # … with 6,192 more rows

Finally, the `un_roll_call_issues` dataset shows relationships between each vote and 6 issues:

    un_roll_call_issues

    ## # A tibble: 5,745 x 3
    ##     rcid short_name issue
    ##    <int> <chr>      <fct>
    ##  1    77 me         Palestinian conflict
    ##  2  9001 me         Palestinian conflict
    ##  3  9002 me         Palestinian conflict
    ##  4  9003 me         Palestinian conflict
    ##  5  9004 me         Palestinian conflict
    ##  6  9005 me         Palestinian conflict
    ##  7  9006 me         Palestinian conflict
    ##  8   128 me         Palestinian conflict
    ##  9   129 me         Palestinian conflict
    ## 10   130 me         Palestinian conflict
    ## # … with 5,735 more rows

    library(dplyr)
    count(un_roll_call_issues, issue, sort = TRUE)

    ## # A tibble: 6 x 2
    ##   issue                                    n
    ##   <fct>                                <int>
    ## 1 Arms control and disarmament          1092
    ## 2 Palestinian conflict                  1061
    ## 3 Human rights                          1015
    ## 4 Colonialism                            957
    ## 5 Nuclear weapons and nuclear material   855
    ## 6 Economic development                   765

(Use `help()` to get information and documentation about each dataset).

### Example analysis

Many useful analyses will first involve joining the vote and roll call datasets by the shared `rcid` (roll call ID) column:

    library(dplyr)

    joined <- un_votes %>%
      inner_join(un_roll_calls, by = "rcid")

    joined

    ## # A tibble: 869,937 x 12
    ##     rcid country country_code vote  session importantvote date       unres amend
    ##    <dbl> <chr>   <chr>        <fct>   <dbl>         <int> <date>     <chr> <int>
    ##  1     3 United… US           yes         1             0 1946-01-01 R/1/…     1
    ##  2     3 Canada  CA           no          1             0 1946-01-01 R/1/…     1
    ##  3     3 Cuba    CU           yes         1             0 1946-01-01 R/1/…     1
    ##  4     3 Haiti   HT           yes         1             0 1946-01-01 R/1/…     1
    ##  5     3 Domini… DO           yes         1             0 1946-01-01 R/1/…     1
    ##  6     3 Mexico  MX           yes         1             0 1946-01-01 R/1/…     1
    ##  7     3 Guatem… GT           yes         1             0 1946-01-01 R/1/…     1
    ##  8     3 Hondur… HN           yes         1             0 1946-01-01 R/1/…     1
    ##  9     3 El Sal… SV           yes         1             0 1946-01-01 R/1/…     1
    ## 10     3 Nicara… NI           yes         1             0 1946-01-01 R/1/…     1
    ## # … with 869,927 more rows, and 3 more variables: para <int>, short <chr>,
    ## #   descr <chr>

One could then count how often each country votes “yes” on a resolution in each year:

    library(lubridate)

    by_country_year <- joined %>%
      group_by(year = year(date), country) %>%
      summarize(votes = n(),
                percent_yes = mean(vote == "yes"))

    by_country_year

    ## # A tibble: 10,461 x 4
    ## # Groups:   year [73]
    ##     year country     votes percent_yes
    ##    <dbl> <chr>       <int>       <dbl>
    ##  1  1946 Afghanistan    17       0.412
    ##  2  1946 Argentina      43       0.698
    ##  3  1946 Australia      43       0.558
    ##  4  1946 Belarus        43       0.442
    ##  5  1946 Belgium        43       0.605
    ##  6  1946 Bolivia        43       0.698
    ##  7  1946 Brazil         43       0.605
    ##  8  1946 Canada         42       0.643
    ##  9  1946 Chile          43       0.605
    ## 10  1946 Colombia       42       0.310
    ## # … with 10,451 more rows

After which this can be visualized for one or more countries:

    library(ggplot2)
    theme_set(theme_bw())

    countries <- c("United States", "United Kingdom", "India", "France")

    by_country_year %>%
      filter(country %in% countries) %>%
      ggplot(aes(year, percent_yes, color = country)) +
      geom_line() +
      ylab("% of votes that are 'Yes'")

Similarly, we could look at how the voting record of the United States has changed on each of the issues by joining with the `un_roll_call_issues` dataset:

    joined %>%
      filter(country == "United States") %>%
      inner_join(un_roll_call_issues, by = "rcid") %>%
      group_by(year = year(date), issue) %>%
      summarize(votes = n(),
                percent_yes = mean(vote == "yes")) %>%
      filter(votes > 5) %>%
      ggplot(aes(year, percent_yes)) +
      geom_point() +
      geom_smooth(se = FALSE) +
      facet_wrap(~ issue)