1. En primer lugar, he cargado varios paquetes para el
desarrollo de todas las actividades:
dplyr,knitr, stingr y
tidyr.
En segundo lugar, he cargado el marco de datos con el comando
load("clea_uc_20220111.rdata") para poder explorarlo y lo
he reordenado con la función glimpse para ver todas las
variables.
glimpse(clea_uc_20220111)
## Rows: 86,964
## Columns: 33
## $ release <dbl> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12…
## $ id <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ rg <chr> "Latin America", "Latin America", "Latin America", "Latin Amer…
## $ ctr_n <chr> "Argentina", "Argentina", "Argentina", "Argentina", "Argentina…
## $ ctr <dbl> 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32…
## $ yr <dbl> 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 20…
## $ mn <dbl> 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10…
## $ sub <chr> "-990", "-990", "-990", "-990", "-990", "-990", "-990", "-990"…
## $ cst_n <chr> "BUENOS AIRES", "BUENOS AIRES", "BUENOS AIRES", "BUENOS AIRES"…
## $ cst <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,…
## $ mag <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,…
## $ pty_n <chr> "FRENTE RENOVADOR POPULAR", "MOVIMIENTO POPULAR PARA LA RECONQ…
## $ pty <dbl> 5535, 71, 151, 196, 64, 6, 5210, 150, 5137, 168, 142, 175, 513…
## $ can <chr> "-990", "-990", "-990", "-990", "-990", "-990", "-990", "-990"…
## $ pev1 <dbl> 9284915, 9284915, 9284915, 9284915, 9284915, 9284915, 9284915,…
## $ vot1 <dbl> 7155761, 7155761, 7155761, 7155761, 7155761, 7155761, 7155761,…
## $ vv1 <dbl> 5510765, 5510765, 5510765, 5510765, 5510765, 5510765, 5510765,…
## $ ivv1 <dbl> 1644996, 1644996, 1644996, 1644996, 1644996, 1644996, 1644996,…
## $ to1 <dbl> 0.7706868, 0.7706868, 0.7706868, 0.7706868, 0.7706868, 0.77068…
## $ cv1 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ cvs1 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ pv1 <dbl> 43349, 21030, 68750, 36626, 20793, 93441, 56663, 17348, 829549…
## $ pvs1 <dbl> 0.0079, 0.0038, 0.0125, 0.0066, 0.0038, 0.0170, 0.0103, 0.0031…
## $ pev2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ vot2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ vv2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ ivv2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ to2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ cv2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ cvs2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ pv2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ pvs2 <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ seat <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
2.
Como podemos ver indicado encima de la tabla, el conjunto de datos contiene un total de 86.964 observaciones y 33 variables.
La unidad de observación sería el país - año de las elecciones.
Los tipos de variables que aparecen son: En
primer lugar, las variables categóricas nominales almacenadas
en forma de caracter (chr) como por ejemplo rg: referida a
la región; las variables de cadena almacenadas en forma de
caracter (chr) como: ctr_n, que se refiere al nombre del
país; y los vectores númericos dobles (dbl), que son aquellos
que pueden ser tanto números enteros como dobles, como por ejemplo,
yr, referido al año en el que se celebraron las
elecciones.
El nivel de análisis sería el estatal.
3. Una pregunta que se podría plantear en relación al marco de
datos es: ¿Los ciudadanos de Chile prefieren votar al Partido Demócrata
Cristiano antes que al Partido Socialista de Chile? Para responder a la
pregunta me he basado en las elecciones de Chile del año 2013.
Para poder visualizar los datos que necesitamos crearé un marco de
datos llamado votos_Chile_2013, utilizaré la función
filter para filtrarlo por país y año de las elecciones; la
función group_by para agrupar los datos en base al nombre
del partido político; summarise para sumar los votos de la
primer vuelta y crear una nueva variable llamada
total_votosy arrange para ordenarlos de mayor
a menor.
votos_chile_2013 <- clea_uc_20220111 %>%
filter(ctr_n == "Chile" & yr == 2013) %>%
group_by(pty_n) %>%
summarise(total_votos = sum(pv1)) %>%
arrange(desc(total_votos))
kable(votos_chile_2013)
| pty_n | total_votos |
|---|---|
| PARTIDO DEMOCRATA CRISTIANO | 744261 |
| RENOVACION NACIONAL | 733726 |
| PARTIDO SOCIALISTA DE CHILE | 728455 |
| UNION DEMOCRATA INDEPENDIENTE | 662447 |
| PARTIDO POR LA DEMOCRACIA | 556131 |
| INDEPENDIENTE LISTA J | 333619 |
| PARTIDO HUMANISTA | 256620 |
| INDEPENDIENTE LISTA I | 219404 |
| INDEPENDIENTE LISTA C | 182224 |
| MOVIMIENTO AMPLIO SOCIAL | 156372 |
| INDEPENDIENTE LISTA L | 114355 |
| INDEPENDIENTE LISTA H | 95328 |
| PARTIDO IGUALDAD | 70692 |
| PARTIDO ECOLOGISTA VERDE | 9895 |
| PARTIDO COMUNISTA DE CHILE | 6423 |
4. En este caso existiría un problema de falacia
ecológica ya que la unidad de análisis y la unidad de
observación no coinciden. Esto es porque la unidad de observación se
refiere a los votos obtenidos por cada partido a nivel estatal, mientras
que la unidad de análisis serían los ciudadanos chilenos, ya que quiero
analizar sus preferencias políticas.
Por lo tanto, a nivel estatal podría parecer que los ciudadanos chilenos
prefieren votar al Partido Demócrata Cristiano antes que al Partido
Socialista de Chile. Sin embargo, si desagregamos los datos y vemos los
votos de los ciudadanos por circunscripciones, nos daremos cuenta de que
el Partido Socialista de Chile ha ganado en un mayor número de
circunscripciones que el Partido Demócrata Cristiano y otros partidos
han ganado en otras circunscripciones. Por ende, no podemos realizar
dicha afirmación y deberíamos contar con datos individuales o al menos,
a un nivel inferior como es la circunscripción.
Para mostrarlo, he creado una tabla donde aparece el partido ganador
en cada circunscripción y el número de votos obtenidos en la primera
ronda en las elecciones de Chile de 2013. He utilizado la función
filter para filtrar por Chile y elecciones del año 2013, la
función group_bypara agrupar los datos por partidos
políticos y circunscripciones; summarise; para calcular el
máximo de votos obtenidos y crear una nueva variable llamada
mas_votos; arrange para ordenarlos de mayor a
menor y por último filter para que sólo aparezca la primera
fila de cada columna.
ganador_circunscripcion <-(clea_uc_20220111) %>%
filter(ctr_n == "Chile" & yr == 2013) %>%
group_by(cst_n, pty_n) %>%
summarise(mas_votos = max(pv1)) %>%
arrange(cst_n, desc(mas_votos)) %>%
filter(row_number() == 1)
kable(ganador_circunscripcion)
| cst_n | pty_n | mas_votos |
|---|---|---|
| Antofagasta | INDEPENDIENTE LISTA C | 91112 |
| Bío Bío Coast | MOVIMIENTO AMPLIO SOCIAL | 156372 |
| Bío Bío Cordillera | PARTIDO POR LA DEMOCRACIA | 121620 |
| Coquimbo | PARTIDO DEMOCRATA CRISTIANO | 78713 |
| Los Lagos | PARTIDO SOCIALISTA DE CHILE | 135372 |
| Los Ríos | PARTIDO SOCIALISTA DE CHILE | 70179 |
| Magallanes | PARTIDO DEMOCRATA CRISTIANO | 22714 |
| O’Higgins | PARTIDO SOCIALISTA DE CHILE | 156230 |
| Santiago East | RENOVACION NACIONAL | 317311 |
| Santiago West | PARTIDO POR LA DEMOCRACIA | 360949 |
Creo una nueva base de datos llamada clea_b con las
variables rg, ctr_n, cst_n,
cst_n, sub, pty_n,
can, vv1
clea_b <- clea_uc_20220111 %>%
select(rg, ctr_n, cst_n, sub, pty_n, can, vv1)
print(clea_b)
## # A tibble: 86,964 × 7
## rg ctr_n cst_n sub pty_n can vv1
## <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 Latin America Argentina BUENOS AIRES -990 FRENTE RENOVADOR POP… -990 5.51e6
## 2 Latin America Argentina BUENOS AIRES -990 MOVIMIENTO POPULAR P… -990 5.51e6
## 3 Latin America Argentina BUENOS AIRES -990 DEL SOCIALISMO AUTEN… -990 5.51e6
## 4 Latin America Argentina BUENOS AIRES -990 POPULAR DE LA RECONS… -990 5.51e6
## 5 Latin America Argentina BUENOS AIRES -990 MOVIMIENTO POPULAR B… -990 5.51e6
## 6 Latin America Argentina BUENOS AIRES -990 ACCION POR LA REPUBL… -990 5.51e6
## 7 Latin America Argentina BUENOS AIRES -990 FRENTE COMPROMISO SO… -990 5.51e6
## 8 Latin America Argentina BUENOS AIRES -990 PROGRESO SOCIAL -990 5.51e6
## 9 Latin America Argentina BUENOS AIRES -990 ALIANZA PARA EL TRAB… -990 5.51e6
## 10 Latin America Argentina BUENOS AIRES -990 HUMANISTA -990 5.51e6
## # … with 86,954 more rows
A. La observación SALTA SOMOS TODOS se trata
del nombre de un partido político de una circunscripción de Argentina
llamada SALTA. Este partido político obtuvo 629291 votos en la primera
ronda de las votaciones. Se desconocen los datos del subdepartamento y
el nombre del candidato. Para descubrirlo he utilizado la función
filter y he filtrado por la variable pty_n, es
decir por nombres de los partidos políticos.
salta_somos_todos <- clea_b %>%
filter(pty_n == "SALTA SOMOS TODOS")
kable(salta_somos_todos)
| rg | ctr_n | cst_n | sub | pty_n | can | vv1 |
|---|---|---|---|---|---|---|
| Latin America | Argentina | SALTA | -990 | SALTA SOMOS TODOS | -990 | 629291 |
B. El candidato OBINNA B. EMUKA pertenece al
partido político Congress for Democratic Change. Para saberlo, he
filtrado con la función filter el candidato
can y he seleccionado con la función select la
variable pty_n, referida a los nombres de los partidos
políticos y de nuevo can.
obinna_b_emuka <- clea_b %>%
filter(can == "OBINNA B.EMUKA") %>%
select(can, pty_n)
kable(obinna_b_emuka)
| can | pty_n |
|---|---|
| OBINNA B.EMUKA | Congress for Democratic Change |
C. La circunscripción District 02 - Sokolov
pertenece a la República Checa y Abia North a Nigeria.
Para saberlo he utilizado la función filter para filtrar
por el nombre de dichas circunscripciones, luego he utilizado la función
select para seleccionar las variables de país
ctr_n y circunscripción cst_npara que
aparezcan en la tabla y distinct para eliminar las filas
duplicadas.
sokolov_abia <- clea_b %>%
filter(cst_n == "District 02 - Sokolov" | cst_n == "Abia North") %>%
select(cst_n, ctr_n) %>%
distinct(cst_n, .keep_all = TRUE)
kable(sokolov_abia)
| cst_n | ctr_n |
|---|---|
| Abia North | Nigeria |
| District 02 - Sokolov | Czech Republic |
D. Para obtener el número de circunscripciones que no están en
América Latina utiizo la función filter para filtrar las
filas donde la variable de región rg no sea igual a América
Latina. A continuación utilizo la función distinct para
eliminar las filas que estén duplicadas de las circunscripciones, lo
sumo utilizando la función summarise para contar el número
de filas. Para poder mostrarlo utilizo la expresión
no_latinoamerica$count. El resultado es: 1305
circunscripciones no se encuentran en América Latina.
no_latinoamerica <- clea_b %>%
filter(rg != "Latin America") %>%
distinct(cst_n) %>%
summarise(count = n())
no_latinoamerica$count
## [1] 1305
E. Para poner los valores de la primera letra de la
variable cst_n en mayúscula modifico el objeto
clea_b, utilizo la función mutate para
modificar la columna del nombre de las circunscripciones
cst_n y aplico la función str_to_tittle del
paquete stringr para poner la primera letra en
mayúsculas.
clea_b <- clea_b %>%
mutate(cst_n = str_to_title(cst_n))
print(clea_b)
## # A tibble: 86,964 × 7
## rg ctr_n cst_n sub pty_n can vv1
## <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
## 1 Latin America Argentina Buenos Aires -990 FRENTE RENOVADOR POP… -990 5.51e6
## 2 Latin America Argentina Buenos Aires -990 MOVIMIENTO POPULAR P… -990 5.51e6
## 3 Latin America Argentina Buenos Aires -990 DEL SOCIALISMO AUTEN… -990 5.51e6
## 4 Latin America Argentina Buenos Aires -990 POPULAR DE LA RECONS… -990 5.51e6
## 5 Latin America Argentina Buenos Aires -990 MOVIMIENTO POPULAR B… -990 5.51e6
## 6 Latin America Argentina Buenos Aires -990 ACCION POR LA REPUBL… -990 5.51e6
## 7 Latin America Argentina Buenos Aires -990 FRENTE COMPROMISO SO… -990 5.51e6
## 8 Latin America Argentina Buenos Aires -990 PROGRESO SOCIAL -990 5.51e6
## 9 Latin America Argentina Buenos Aires -990 ALIANZA PARA EL TRAB… -990 5.51e6
## 10 Latin America Argentina Buenos Aires -990 HUMANISTA -990 5.51e6
## # … with 86,954 more rows
F. Para recodificar la variable
pty, que no aparece en el marco de datos
clea b, he decidido crear un nuevo marco de datos llamado
clea_b2 e incluir la variable. He utilizado la función
mutate para modificar la variable pty y con
case_when la he recodificado asignando las etiquetas.
Después, para mostrar un ejemplo de cada una de las etiquetas he
creado una tabla nueva llamada recodificacion. He agrupado
con la función group_by la variable pty para
poder filtrarlo de forma que aparezca una sóla fila de cada etiqueta con
filter(row_number() == 1). Por último, he utilizado la
función drop_na del paquete tidyrpara eliminar
los valores NA.
clea_b2 <- clea_uc_20220111 %>%
select(rg, ctr_n, cst_n, sub, pty, pty_n, can, vv1) %>%
mutate(pty = case_when(
pty >= 1 & pty <= 3999 ~ "Partidos Políticos",
pty >= 4000 & pty <= 5000 ~ "Otros",
pty >= 5001 & pty <= 5999 ~ "Coaliciones o Alianzas",
pty > 6000 ~ "Independiente"
))
recodificacion <- clea_b2 %>%
group_by(pty) %>%
filter(row_number() == 1) %>%
drop_na()
kable(recodificacion)
| rg | ctr_n | cst_n | sub | pty | pty_n | can | vv1 |
|---|---|---|---|---|---|---|---|
| Latin America | Argentina | BUENOS AIRES | -990 | Coaliciones o Alianzas | FRENTE RENOVADOR POPULAR | -990 | 5510765 |
| Latin America | Argentina | BUENOS AIRES | -990 | Partidos Políticos | MOVIMIENTO POPULAR PARA LA RECONQUISTA | -990 | 5510765 |
| Asia | Bhutan | Bumthang | -990 | Independiente | Independent | Jigme Palden | 3616 |
| Latin America | Mexico | AGUASCALIENTES | -990 | Otros | Candidatos no registrados | -990 | 207936 |
G. Los partidos que se consideran coaliciones o
alianzas segñun el coodebook son aquellos que van del número
5001 a 5999 de la varible pty y se refiere a dos o más
partidos que se unen en coalición para una elección o que forman una
alianza.
Puedo filtar directamente o crear un nuevo marco de datos de las
coaliciones y alianzas. He hecho lo segundo, he filtrado con la función
filter los resultados de la variable pty
iguales a coaliciones o alianzas y con distinct elimino los
nombres duplicados de los partidos políticos pty_n. En este
último paso, si quisiera que saliesen las demás columnas que tenemos en
el marco de datos clea_b, podria utilizar la función
keep_all=TRUE.
coaliciones <- clea_b2 %>%
filter(pty == "Coaliciones o Alianzas") %>%
distinct(pty_n)
print(coaliciones)
## # A tibble: 798 × 1
## pty_n
## <chr>
## 1 FRENTE RENOVADOR POPULAR
## 2 FRENTE COMPROMISO SOCIAL
## 3 ALIANZA PARA EL TRABAJO, LA JUSTICIA Y LA EDUCACION
## 4 ALIANZA OBRERO - MOVIMIENTO AL SOCIALISMO
## 5 IZQUIERDA UNIDA
## 6 ALIANZA FRENTE POLO SOCIAL
## 7 ALTERNATIVA PARA UNA REPUBLICA DE IGUALES
## 8 ALIANZA IZQUIERDA UNIDA
## 9 ALIANZA FRENTE UNION POR BUENOS AIRES - ALIANZA DE CENTRO
## 10 ALIANZA 2001 PARA EL TRABAJO, LA JUSTICIA Y LA EDUCACION
## # … with 788 more rows
En primer lugar, he creado el marco de datos kings_battles para poder explorarlo.
kings_battles <- read.csv("5kings_battles_v1.csv")
glimpse(kings_battles)
## Rows: 38
## Columns: 25
## $ name <chr> "Battle of the Golden Tooth", "Battle at the Mummer…
## $ year <int> 298, 298, 298, 298, 298, 298, 298, 299, 299, 299, 2…
## $ battle_number <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ attacker_king <chr> "Joffrey/Tommen Baratheon", "Joffrey/Tommen Barathe…
## $ defender_king <chr> "Robb Stark", "Robb Stark", "Robb Stark", "Joffrey/…
## $ attacker_1 <chr> "Lannister", "Lannister", "Lannister", "Stark", "St…
## $ attacker_2 <chr> "", "", "", "", "Tully", "Tully", "", "", "", "", "…
## $ attacker_3 <chr> "", "", "", "", "", "", "", "", "", "", "", "", "",…
## $ attacker_4 <chr> "", "", "", "", "", "", "", "", "", "", "", "", "",…
## $ defender_1 <chr> "Tully", "Baratheon", "Tully", "Lannister", "Lannis…
## $ defender_2 <chr> "", "", "", "", "", "", "", "", "", "", "", "", "",…
## $ defender_3 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ defender_4 <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ attacker_outcome <chr> "win", "win", "win", "loss", "win", "win", "win", "…
## $ battle_type <chr> "pitched battle", "ambush", "pitched battle", "pitc…
## $ major_death <int> 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, …
## $ major_capture <int> 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, …
## $ attacker_size <int> 15000, NA, 15000, 18000, 1875, 6000, NA, NA, 1000, …
## $ defender_size <int> 4000, 120, 10000, 20000, 6000, 12625, NA, NA, NA, N…
## $ attacker_commander <chr> "Jaime Lannister", "Gregor Clegane", "Jaime Lannist…
## $ defender_commander <chr> "Clement Piper, Vance", "Beric Dondarrion", "Edmure…
## $ summer <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ location <chr> "Golden Tooth", "Mummer's Ford", "Riverrun", "Green…
## $ region <chr> "The Westerlands", "The Riverlands", "The Riverland…
## $ note <chr> "", "", "", "", "", "", "", "", "", "Greyjoy's troo…
En primer lugar, para poder analizar los datos del documento csv, he
creado un marco de datos llamado king_battles.
Una vez creado, he utilizado la función glimpse que me
permite reordenar la tabla de forma vertical, lo que me permite
visualizar todas las variables y los primeros datos de cada una de
ellas.
En la parte superior de la tabla y gracias a la función que he aplicado, puedo observar que tiene 38 observaciones y 25 variables.
La unidad de observación es el nombre de la batalla y el año, que corresponde a las dos primeras variables.
Gracias a la función glimpse veo todas las variables y
cómo están almacenadas. Aunque puedo detectar de qué tipo son sabiendo
cómo están almacenadas y viendo las primeras filas de cada una, me he
apoyado del libro de códigos para describirlas:
Hay variables de cadena almacenadas en forma de caracter
(chr) como name, nombre de la batalla;
variables categóricas nominales almacenadas en forma de
caracter (chr) como defender_king, rey defensor;
vectores númericos que se almacenan en forma de números
enteros (int) como por ejemplo, battle_number, número de
batalla;
y por último, variables binarias como
summer, verano sí o no, almacenadas en números enteros
(int).
(201 palabras)
1. En verano hubo 26 batallas. Para calcularlo
he utilizado la función filter señalando que la variable
summer debe ser igual a 1, ya que se trata de una variable binaria. En
la tabla aparecerán tan sólo 5 batallas porque las he cortado con la
función head.
batallas_verano <- kings_battles %>%
filter(summer == 1) %>%
head(n = 5)
kable(batallas_verano)
| name | year | battle_number | attacker_king | defender_king | attacker_1 | attacker_2 | attacker_3 | attacker_4 | defender_1 | defender_2 | defender_3 | defender_4 | attacker_outcome | battle_type | major_death | major_capture | attacker_size | defender_size | attacker_commander | defender_commander | summer | location | region | note |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Battle of the Golden Tooth | 298 | 1 | Joffrey/Tommen Baratheon | Robb Stark | Lannister | Tully | NA | NA | win | pitched battle | 1 | 0 | 15000 | 4000 | Jaime Lannister | Clement Piper, Vance | 1 | Golden Tooth | The Westerlands | |||||
| Battle at the Mummer’s Ford | 298 | 2 | Joffrey/Tommen Baratheon | Robb Stark | Lannister | Baratheon | NA | NA | win | ambush | 1 | 0 | NA | 120 | Gregor Clegane | Beric Dondarrion | 1 | Mummer’s Ford | The Riverlands | |||||
| Battle of Riverrun | 298 | 3 | Joffrey/Tommen Baratheon | Robb Stark | Lannister | Tully | NA | NA | win | pitched battle | 0 | 1 | 15000 | 10000 | Jaime Lannister, Andros Brax | Edmure Tully, Tytos Blackwood | 1 | Riverrun | The Riverlands | |||||
| Battle of the Green Fork | 298 | 4 | Robb Stark | Joffrey/Tommen Baratheon | Stark | Lannister | NA | NA | loss | pitched battle | 1 | 1 | 18000 | 20000 | Roose Bolton, Wylis Manderly, Medger Cerwyn, Harrion Karstark, Halys Hornwood | Tywin Lannister, Gregor Clegane, Kevan Lannister, Addam Marbrand | 1 | Green Fork | The Riverlands | |||||
| Battle of the Whispering Wood | 298 | 5 | Robb Stark | Joffrey/Tommen Baratheon | Stark | Tully | Lannister | NA | NA | win | ambush | 1 | 1 | 1875 | 6000 | Robb Stark, Brynden Tully | Jaime Lannister | 1 | Whispering Wood | The Riverlands |
2. Roland Storm fue el comandante
defensor en 1 batalla. Para averiguarlo he utilizado la función
filter para filtrar por el nombre del comandante
defensor.
roland_storm <- kings_battles %>%
filter(defender_commander == "Rolland Storm")
kable(roland_storm)
| name | year | battle_number | attacker_king | defender_king | attacker_1 | attacker_2 | attacker_3 | attacker_4 | defender_1 | defender_2 | defender_3 | defender_4 | attacker_outcome | battle_type | major_death | major_capture | attacker_size | defender_size | attacker_commander | defender_commander | summer | location | region | note |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Siege of Dragonstone | 300 | 35 | Joffrey/Tommen Baratheon | Stannis Baratheon | Baratheon | Baratheon | NA | NA | win | siege | 0 | 0 | 2000 | NA | Loras Tyrell, Raxter Redwyne | Rolland Storm | 0 | Dragonstone | The Stormlands |
3. Para obtener un data frame en el que el número de
tropas atacantes sea superior a 10000 y el número de tropas
defensoras sea inferior a 6000 he utilizado la función
filter y he indicado que la variable
attacker_size debe ser superior a 1000 y la variable
defender_size es inferior a 6000.
atacantes_defensores <- kings_battles %>%
filter(attacker_size > 10000, defender_size < 6000)
kable(atacantes_defensores)
| name | year | battle_number | attacker_king | defender_king | attacker_1 | attacker_2 | attacker_3 | attacker_4 | defender_1 | defender_2 | defender_3 | defender_4 | attacker_outcome | battle_type | major_death | major_capture | attacker_size | defender_size | attacker_commander | defender_commander | summer | location | region | note |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Battle of the Golden Tooth | 298 | 1 | Joffrey/Tommen Baratheon | Robb Stark | Lannister | Tully | NA | NA | win | pitched battle | 1 | 0 | 15000 | 4000 | Jaime Lannister | Clement Piper, Vance | 1 | Golden Tooth | The Westerlands | |||||
| Battle of Castle Black | 300 | 28 | Stannis Baratheon | Mance Rayder | Free folk | Thenns | Giants | Night’s Watch | Baratheon | NA | NA | loss | siege | 1 | 1 | 100000 | 1240 | Mance Rayder, Tormund Giantsbane, Harma Dogshead, Magnar Styr, Varamyr | Stannis Baratheon, Jon Snow, Donal Noye, Cotter Pyke | 0 | Castle Black | Beyond the Wall |
4. He ordenado en orden descendente el número de tropas
del atacante utilizando la función arrange
indicando que el orden debe ser descendente en función de la variable
attacker_size. La función select la he
introducido para que solo aparezca en la tabla el nombre de la batalla y
el tamaño del atacante. También he cortado la tabla utilizando la
función head.
tropas_atacante <- kings_battles %>%
arrange(desc(attacker_size)) %>%
select(name, attacker_size) %>%
head(n = 5)
kable(tropas_atacante)
| name | attacker_size |
|---|---|
| Battle of Castle Black | 100000 |
| Battle of the Blackwater | 21000 |
| Battle of the Fords | 20000 |
| Battle of the Green Fork | 18000 |
| Battle of the Golden Tooth | 15000 |
5. He creado una nueva variable
“shield_islands” que es TRUE cuando la batalla ocurrió en la
localidad de “Shield Islands”. Para ello he utilizado la función
mutate para crear la nueva variable; con la función
if_else he señalado que será TRUE cuando la variable
location coincida con Shield Islands y FALSE cuando no
coincida.
Después he creado una nueva tabla en la que he utilizado la función
group_by para que agrupe los datos en base a la nueva
variable; la función filter(row_number() para que muestre
un ejemplo de FALSE y otro de TRUE y por último, he utilizado
select para que en la tabla solo aparezcan las variables
que yo quiero.
kings_battles <- kings_battles %>%
mutate(shield_islands = if_else(location == "Shield Islands", TRUE, FALSE))
tabla_shield <- kings_battles %>%
group_by(shield_islands) %>%
filter(row_number() == 1) %>%
select(name, location, shield_islands)
kable(tabla_shield)
| name | location | shield_islands |
|---|---|---|
| Battle of the Golden Tooth | Golden Tooth | FALSE |
| Battle of the Shield Islands | Shield Islands | TRUE |
6. He creado la variable “Lannister_Tully” con
la función mutate; después he utilizado
case when para crear las tres categorías: “Lannister”
cuando el primer atacante sea igual a Lannister, “Tully” cuando el
primer atacante sea igual a un Tully y “Otro” utilizando
TRUE para decir que no es ni Lannister ni Tully.
Después he creado un ejemplo de una tabla sencilla con la función
group by para agrupar por la nueva variable;
filter(row_number() para que muestre un ejemplo de cada uno
y por último, he utilizado select para que en la tabla solo
aparezcan algunas variables. En este caso no aparece el ejemplo de Tully
puesto que no hay ningún primer atacante que sea un Tully.
kings_battles <- kings_battles %>%
mutate(Lannister_Tully = case_when(
attacker_1 == "Lannister" ~ "Lannister",
attacker_1 == "Tully" ~ "Tully",
TRUE ~ "Otro"
))
tabla_Lannister_Tully <- kings_battles %>%
group_by(Lannister_Tully) %>%
filter(row_number() == 1) %>%
select(name, attacker_1, Lannister_Tully)
kable(tabla_Lannister_Tully)
| name | attacker_1 | Lannister_Tully |
|---|---|---|
| Battle of the Golden Tooth | Lannister | Lannister |
| Battle of the Green Fork | Stark | Otro |
1.¿Qué batallas con más de 5000 defensores fueron ganadas por el
atacante?
La respuesta a esta pregunta sería la batalla de Siege of Storm’s End con 20000 defensores, la Battle of Camps con 12625, Battle of Riverrun con 10000, Battle of Oxcross con 10000, Battle of the Whispering Wood con 6000 y Battle of the Ruby Ford con 6000.
Para ello, he creado un nuevo marco de datos, he utilizado
filter para ordenar que la variable
defender_size sea mayor a 5000 y que el resultado de la
variable attacker_outcome sea win. Después he utilizado
select para incluir las variables que quiero que aparezcan
en la tabla y arrange(desc) para ordenar de mayor a menor
el tamaño de los defensores. (119 palabras)
batallas_ganadas_5000_defensores <- kings_battles %>%
filter(defender_size > 5000, attacker_outcome == "win") %>%
select(name, attacker_1, defender_1, attacker_outcome, defender_size) %>%
arrange(desc(defender_size))
kable(batallas_ganadas_5000_defensores)
| name | attacker_1 | defender_1 | attacker_outcome | defender_size |
|---|---|---|---|---|
| Siege of Storm’s End | Baratheon | Baratheon | win | 20000 |
| Battle of the Camps | Stark | Lannister | win | 12625 |
| Battle of Riverrun | Lannister | Tully | win | 10000 |
| Battle of Oxcross | Stark | Lannister | win | 10000 |
| Battle of the Whispering Wood | Stark | Lannister | win | 6000 |
| Battle of the Ruby Ford | Lannister | Stark | win | 6000 |
2. ¿Quienes eran los reyes atacantes en las batallas tipo ambush
de la region de The North donde hubo al menos una muerte de una figura
importante durante la batalla?
La respuesta a la pregunta sería: el rey era Joffrey/Tommen Baratheon.
Para responder a esta pregunta he creado un nuevo marco de datos, he
utilizado la función filter para que filtre los resultados
en base a la variable region y que esta sea igual a la
región sobre la que se basa mi pregunta, The North, que el tipo de
batalla battle type sea ambush; después he utilizado mutate
para que el resultado de la variable major_death en vez de
1 o 0 sea TRUE o FALSE; de nuevo filter para que sólo me de
los resultados donde major_death sea igual a TRUEM; y por
último, he seleccionado con la función select las variables
que quiero que aparezcan en la tabla. (150 palabras)
the_north <- kings_battles %>%
filter(region == "The North", battle_type == "ambush") %>%
mutate(major_death = ifelse(major_death == 1, TRUE, FALSE)) %>%
filter(major_death == TRUE) %>%
select(name, attacker_king, defender_king, region, battle_type, major_death)
kable(the_north)
| name | attacker_king | defender_king | region | battle_type | major_death |
|---|---|---|---|---|---|
| Sack of Winterfell | Joffrey/Tommen Baratheon | Robb Stark | The North | ambush | TRUE |
Chrisalbon. (2023).The War Of The Five Kings, A Dataset. Github. https://github.com/chrisalbon/war_of_the_five_kings_dataset
CLEA. (2023). Effective number of parties and party nationalization data. Coodebook.
Kollman, K., Hicken, A., Caramani, D., Backer, D., & Lublin, D. (2020). Constituency-Level Elections Archive [Data set and codebook]. Ann Arbor, MI: Center for Political Studies, University of Michigan [producer and distributor]. http://www.electiondataarchive.org.
Mas, J. (2023). Conjuntos de datos [recurso de aprendizaje textual]. Fundació Universitat Oberta de Catalunya (FUOC).
Singer, D. (1961). The Level-of-Analysis Problem in International Relations. World politics, 1961, Vol.14 (1), p.77-92, Article 77.