La suite de tidyverse contiene muchos paquetes para manejo de datos.
library(readr)
library(dplyr)
Con la función read_tsv() podemos importar un archivo de
datos separado por tabs.
poblacion <- read_tsv("data/poblacion.tsv")
El dataset de población contiene datos del INEGI del censo de población 2020.
glimpse(poblacion)
## Rows: 2,469
## Columns: 9
## $ entidad <chr> "01", "01", "01", "01", "01", "01", "01", "01", "01", "01", …
## $ nom_ent <chr> "Aguascalientes", "Aguascalientes", "Aguascalientes", "Aguas…
## $ mun <chr> "001", "002", "003", "004", "005", "006", "007", "008", "009…
## $ nom_mun <chr> "Aguascalientes", "Asientos", "Calvillo", "Cosío", "Jesús Ma…
## $ pobtot <dbl> 948990, 51536, 58250, 17000, 129929, 47646, 57369, 9552, 224…
## $ pobfem <dbl> 486917, 26275, 29687, 8708, 65710, 24269, 29268, 5020, 11371…
## $ pob0_14 <dbl> 240583, 16266, 16720, 5183, 38303, 14140, 17703, 3033, 6858,…
## $ pob15_64 <dbl> 639532, 31919, 35854, 10699, 84949, 30491, 35926, 5838, 1400…
## $ pob65_mas <dbl> 67941, 3331, 5641, 1118, 6538, 2977, 3579, 681, 1566, 1392, …
El verbo filter() de dplyr nos permite seleccionar un
subconjunto de las filas de acuerdo a alguna condición.
bajio <- c("Aguascalientes", "Guanajuato", "Querétaro", "San Luis Potosí", "Zacatecas")
poblacion <- poblacion %>%
filter(nom_ent %in% bajio)
El verbo select() nos permite seleccionar y renombrar un
subconjunto de las columnas
poblacion <- poblacion %>%
select(entidad = nom_ent, municipio = nom_mun, infantil = pob0_14,
adultos = pob15_64, adultos_mayores = pob65_mas)
head(poblacion)
## # A tibble: 6 × 5
## entidad municipio infantil adultos adultos_mayores
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 Aguascalientes Aguascalientes 240583 639532 67941
## 2 Aguascalientes Asientos 16266 31919 3331
## 3 Aguascalientes Calvillo 16720 35854 5641
## 4 Aguascalientes Cosío 5183 10699 1118
## 5 Aguascalientes Jesús María 38303 84949 6538
## 6 Aguascalientes Pabellón de Arteaga 14140 30491 2977
Con ggplot2 podemos construir gráficas
library(ggplot2)
Por ejemplo, esta es la distribución de la población infantil
ggplot(data = poblacion) +
geom_boxplot(aes(x = entidad, y = infantil, color = entidad)) +
labs(title = "Distribución de la población infantil en los estados del bajío", y = "Población infantil", x = "") +
scale_color_brewer(name = "Entidad", palette = "Set2") +
theme_classic()
Con pivot_longer() de tidyr pasamos de un dataset ancho
a un dataset largo.
library(tidyr)
poblacion_por_edades <- poblacion %>%
pivot_longer(cols = c(infantil, adultos, adultos_mayores),
names_to = "tipo_poblacion", values_to = "cantidad")
head(poblacion_por_edades)
## # A tibble: 6 × 4
## entidad municipio tipo_poblacion cantidad
## <chr> <chr> <chr> <dbl>
## 1 Aguascalientes Aguascalientes infantil 240583
## 2 Aguascalientes Aguascalientes adultos 639532
## 3 Aguascalientes Aguascalientes adultos_mayores 67941
## 4 Aguascalientes Asientos infantil 16266
## 5 Aguascalientes Asientos adultos 31919
## 6 Aguascalientes Asientos adultos_mayores 3331
ggplot(data = poblacion_por_edades) +
geom_violin(aes(x = tipo_poblacion, y = cantidad, color = tipo_poblacion)) +
facet_wrap(~entidad, nrow = 3, scales = "free_y") +
scale_color_brewer(name = "Tipo de población", palette = "Dark2") +
labs(y = "Población", x = "", title = "Distribución de la población en los estados del bajío") +
theme_bw() +
theme(axis.text.x = element_blank())