-
Notifications
You must be signed in to change notification settings - Fork 3
/
add_archigos.R
151 lines (114 loc) · 5.51 KB
/
add_archigos.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#' Add Archigos political leader information to dyad-year and state-year data
#'
#' @description \code{add_archigos()} allows you to add some information about leaders to dyad-year
#' or state-year data. The function leans on an abbreviated version of the data, which also comes in this package.
#'
#'
#' @return \code{add_archigos()} takes a dyad-year or state-year data frame and adds a few summary
#' variables based off the leader-level data. These include whether there was a leader transition in the
#' state-year (or first/second state in the dyad-year), whether there was an "irregular" leader transition,
#' the number of leaders in the state-year, the unique leader ID for Jan. 1 of the year, and the unique leader
#' ID for Dec. 31 of the year.
#'
#' @details The function leans on attributes of the data that are provided by the \code{create_dyadyear()} or
#' \code{create_stateyear()} function. Make sure that function (or data created by that function) appear at the top
#' of the proverbial pipe.
#'
#' @author Steven V. Miller
#'
#' @param data a dyad-year data frame (either "directed" or "non-directed") or state-year data frame
#'
#' @references
#'
#' Goemans, Henk E., Kristian Skrede Gleditsch, and Giacomo Chiozza. 2009. "Introducing Archigos: A Dataset of Political Leaders"
#' \emph{Journal of Peace Research} 46(2): 269--83.
#'
#' @examples
#' \donttest{
#' # just call `library(tidyverse)` at the top of the your script
#' library(magrittr)
#'
#' cow_ddy %>% add_archigos()
#'
#' create_stateyears() %>% add_archigos()
#' }
#'
#'
#' @importFrom rlang .data
#' @importFrom rlang .env
#'
add_archigos <- function(data) {
archigos %>%
rowwise() %>%
mutate(date = list(seq(.data$startdate, .data$enddate, by="1 day"))) %>%
unnest(date) %>%
mutate(year = .pshf_year(date)) %>%
filter(.data$year >= 1870) %>%
arrange(date) %>%
group_by(.data$gwcode, .data$year) %>%
mutate(jan1obsid = first(.data$obsid),
dec31obsid = last(.data$obsid),
leadertransition = ifelse(.data$jan1obsid != .data$dec31obsid, 1, 0),
n_leaders = n_distinct(.data$leadid),
irregular = ifelse(.data$leadertransition == 1 & any(.data$exit == "Irregular"), 1, 0)) %>%
group_by(.data$gwcode, .data$year) %>%
select(.data$gwcode, .data$year, .data$leadertransition, .data$irregular, .data$n_leaders, .data$jan1obsid, .data$dec31obsid) %>%
group_by(.data$gwcode, .data$year) %>%
slice(1) %>% ungroup() -> archigossums
if (length(attributes(data)$ps_data_type) > 0 && attributes(data)$ps_data_type == "dyad_year") {
if (length(attributes(data)$ps_data_type) > 0 && attributes(data)$ps_system == "cow") {
archigossums %>%
left_join(., gw_cow_years %>% select(.data$gwcode, .data$ccode, .data$year)) -> hold_this
# Naturally, the different ways of handling Serbia screw things up here.
# On June 4, 2006, archigos records a leader transition and a state transition,
# from YUG-2003 to SER-2006. CoW would see this as just a leader transition, not
# a state transition as well. We can use some rudimentary filter/case_when to fix this
# and then remove gwcode later. In this case, CoW's Serbia starts the year with YUG-2003 and
# ends it with SER-2006.
hold_this %>%
filter(!(.data$gwcode == 340 & .data$year == 2006)) %>%
mutate(dec31obsid = case_when(
.data$gwcode == 345 & .data$year == 2006 ~ "SER-2006",
TRUE ~ .data$dec31obsid
)) -> hold_this
hold_this$gwcode <- NULL
hold_this %>%
rename_at(vars(-.data$year), ~paste0(.,"1")) %>%
left_join(data, ., by=c("ccode1"="ccode1", "year"="year")) %>%
left_join(., hold_this %>%
rename_at(vars(-.data$year), ~paste0(.,"2")), by=c("ccode2"="ccode2", "year"="year")) -> data
} else { # Assuming it's GW..
archigossums %>%
rename_at(vars(-.data$year), ~paste0(.,"1")) %>%
left_join(data, .) %>%
left_join(., hold_this %>%
rename_at(vars(-.data$year), ~paste0(.,"2"))) -> data
}
} else if (length(attributes(data)$ps_data_type) > 0 && attributes(data)$ps_data_type == "state_year") {
if (length(attributes(data)$ps_data_type) > 0 && attributes(data)$ps_system == "cow") {
archigossums %>%
left_join(., gw_cow_years %>% select(.data$gwcode, .data$ccode, .data$year)) -> hold_this
# Naturally, the different ways of handling Serbia screw things up here.
# On June 4, 2006, archigos records a leader transition and a state transition,
# from YUG-2003 to SER-2006. CoW would see this as just a leader transition, not
# a state transition as well. We can use some rudimentary filter/case_when to fix this
# and then remove gwcode later. In this case, CoW's Serbia starts the year with YUG-2003 and
# ends it with SER-2006.
hold_this %>%
filter(!(.data$gwcode == 340 & .data$year == 2006)) %>%
mutate(dec31obsid = case_when(
.data$gwcode == 345 & .data$year == 2006 ~ "SER-2006",
TRUE ~ .data$dec31obsid
)) -> hold_this
hold_this$gwcode <- NULL
data %>%
left_join(., hold_this, by=c("ccode"="ccode", "year"="year")) -> data
} else { # Assuming it's G-W...
data %>%
left_join(., archigossums) -> data
}
} else {
stop("add_archigos() requires a data/tibble with attributes$ps_data_type of state_year or dyad_year. Try running create_dyadyears() or create_stateyears() at the start of the pipe.")
}
return(data)
}