Métodos Cuantitativos Básicos - Otoño 2020
Ejercicios previos al laboratorio de la semana 7
¿Qué verbo de {dplyr} se debe utilizar en cada uno de los siguientes casos?
- Del tibble mundial me interesa conservar únicamente las observaciones de jugadores de México y Colombia
Usar el verbo filter.
- En la base de CONEVAL quiero construir un ranking de los estados con mayor pobreza extrema
En este caso, uso el verbo mutate con la función rank dentro.
- Del tibble
presidentenecesito conservar únicamente las variables que contienen información sobre los votos que recibió el PAN
Uso el verbo select, para quedarme con los datos del PAN.
## # A tibble: 6 x 2
## nombre_distrito pan
## <chr> <dbl>
## 1 JESUS MARIA 47710
## 2 AGUASCALIENTES 40125
## 3 AGUASCALIENTES 74267
## 4 MEXICALI 34027
## 5 MEXICALI 38591
## 6 ENSENADA 28926
- Me gustaría que la base de la ENVIPE que contiene información de cifra negra a nivel estatal muestre las observaciones con orden descendente
Para ordenar los renglones, utilizo el verbo dplyr::arrange() con el argumento ordenador (en este caso, las observaciones) acompañado de un símbolo de menos (-).
- En el tibble
pib_mex, las cifras del PIB están en millones de pesos. Me gustaría tener una variable que exprese estas cifras en pesos.
Uso el verbo mutate para generar una nueva variable (columna) multiplicando la columna del PIB por 1e6.
- Quisiera cambiar el nombre de todas las variables del tibble
parametria
Uso el verbo rename (y alguno de sus primos, si así lo considero prudente) y cambio los nombres a otros que me parezcan mejores.
Expliquen la diferencia entre
mutate()ytransmute()mutate()genera una nueva columna y la agrega a untibble/data.frameexistente.
transmute()genera una nueva columna y la extrae de sutibble/data.framegenerador, quedandonos sòlo con dicha columna.
Es como la imágen de arriba, pero llevandose la columna.
- ¿Qué funciones podemos utilizar dentro de
mutate()para construir variables desfazadas?
Podemos usar la función dplyr::lag() para generar retrasos y la función dplyr::lead() para generar adelantos.
Ejercicio práctico:
Del archivo de la ENVIPE, importen los datos de “Delitos ocurridos por entidad federativa, según cifra negra, 2017” y guárdenlos en un objeto que se llame cifra_negra. OJO: asegúrense de convertir las variables a tipo numeric en caso necesario.
# Importamos las bases de datos
library(readxl)
cifra_negra <- read_excel("III_denuncia_delito_2018_est.xlsx",
sheet = "3.3",
range = "A7:E41",
col_types = c("text",
"numeric", "skip",
"numeric", "numeric")) ## New names:
## * `` -> ...1
## * `` -> ...2
# Quitamos los NAs de la primera línea:
cifra_negra <- cifra_negra %>%
filter(!is.na(Absolutos))
# Exploramos BD
glimpse(cifra_negra)## Rows: 33
## Columns: 4
## $ ...1 <chr> "Estados Unidos Mexicanos", "Aguascalientes", "Baja Ca…
## $ ...2 <dbl> 33614307, 352271, 1094675, 149777, 180991, 517418, 142…
## $ Absolutos <dbl> 31341003, 314877, 976362, 128416, 162245, 482304, 1259…
## $ Relativos <dbl> 93.23709, 89.38488, 89.19195, 85.73813, 89.64258, 93.2…
No convertiré a numeric hasta que me tope algún problema.
- Renombren las variables como:
Entidad,delitos_totales,cn_absolutaycn_relativa.
Primero hago pruebas, sin reescribir la variable…
# Primero imprimo...
cifra_negra %>%
rename(
#Nombre_nuevo = Nombre_viejo
Entidad = `...1`,
"delitos_totales" = "...2",
cn_absoluta = "Absolutos",
"cn_relativa" = `Relativos`
)## # A tibble: 33 x 4
## Entidad delitos_totales cn_absoluta cn_relativa
## <chr> <dbl> <dbl> <dbl>
## 1 Estados Unidos Mexicanos 33614307 31341003 93.2
## 2 Aguascalientes 352271 314877 89.4
## 3 Baja California 1094675 976362 89.2
## 4 Baja California Sur 149777 128416 85.7
## 5 Campeche 180991 162245 89.6
## 6 Coahuila de Zaragoza 517418 482304 93.2
## 7 Colima 142644 125971 88.3
## 8 Chiapas 683285 640664 93.8
## 9 Chihuahua 743796 676478 90.9
## 10 Ciudad de México 4740868 4428139 93.4
## # … with 23 more rows
…luego, ya que estoy seguro, sobreescribo:
cifra_negra <- cifra_negra %>%
rename(
#Nombre_nuevo = Nombre_viejo
Entidad = `...1`,
"delitos_totales" = "...2",
cn_absoluta = "Absolutos",
"cn_relativa" = `Relativos`
)- Filtren el tibble para eliminar los renglones vacíos
Ya lo hice arriba, pero lo hacemos de nuevo acá:
- El promedio cifra negra en términos absolutos es
978,019.4. Construyan una variable nueva que nos indique qué estados tienen una cifra negra por encima del promedio y cuáles no.
# Guardo el promedio en un objeto
promedio <- 978019.4
# Creamos columna para indicar cuando se esta sobre o bajo el promedio.
cifra_negra <- cifra_negra %>%
mutate(cn_sobre_prom = ifelse(test = (cn_absoluta - promedio) > 0,
yes = "Sobre",
no = "Bajo"))- ¿Cuántos estados están por encima del promedio?
Tres formas distintas:
## Sobre
## 8
## [1] 8
## # A tibble: 2 x 2
## # Groups: cn_sobre_prom [2]
## cn_sobre_prom n
## <chr> <int>
## 1 Bajo 25
## 2 Sobre 8
- Construyan una variable que sea un ranking ascendente de
cn_relativa.
# Ranking ascendente de cn_relativa
cifra_negra <- cifra_negra %>%
mutate(rank_asc = rank(cn_relativa)) %>%
arrange(rank_asc)
print(cifra_negra %>% select(Entidad, rank_asc))## # A tibble: 33 x 2
## Entidad rank_asc
## <chr> <dbl>
## 1 Baja California Sur 1
## 2 Colima 2
## 3 Hidalgo 3
## 4 Baja California 4
## 5 Aguascalientes 5
## 6 Campeche 6
## 7 Yucatán 7
## 8 Querétaro 8
## 9 Durango 9
## 10 Chihuahua 10
## # … with 23 more rows
- ¿Cuáles son los estados con menor porcentaje de cifra negra?
## # A tibble: 5 x 2
## Entidad rank_asc
## <chr> <dbl>
## 1 Baja California Sur 1
## 2 Colima 2
## 3 Hidalgo 3
## 4 Baja California 4
## 5 Aguascalientes 5
Extra: ¿tuvieron que especificar un criterio para desempates? ¿Por qué?
## [1] FALSE TRUE FALSE FALSE FALSE TRUE
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [23] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Veo que no hubo dupicados, por lo tanto, no había necesidad de especificar un criterio de desempate.