# Carga de datos desde un archivo CSV
rios <-
read.csv(file = 'https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/hidrologia/fdc/FDC.csv')
# Carga de datos desde un archivo CSV
covid <-
read.csv(file = 'https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/ministerio-salud/covid/ultimafecha_CSV_GENERAL.csv')
El paquete dplyr de Tidyverse es descrito como una “gramática para la manipulación de datos, la cual proporciona un conjunto consistente de verbos que ayuda a solucionar los retos de manipulación de datos más comunes”. Los principales “verbos” (i.e. funciones) de esta gramática son:
mutate(): crea nuevas variables, las cuales se expresan como funciones de variables existentes.
select(): selecciona variables con base en sus nombres.
filter(): selecciona observaciones con base en sus valores.
arrange(): cambia el orden de las filas.
summarise(): agrupa y resume valores.
Todas estas operaciones pueden combinarse con la función group_by(), la cual ejecuta cualquiera de las operaciones anteriores “en grupo”. Además, dplyr proporciona funciones adicionales para tareas más específicas.
Todas las funciones de dplyr trabajan de manera similar:
Las funciones de dplyr pueden encadenarse a través del operador pipe (%>%) (tubo), para formar pipelines (tuberías). En este contexto, un pipeline consiste de una cadena de procesos conectados de forma tal que la salida de cada proceso de la cadena es la entrada del próximo. Esto permite la comunicación y sincronización entre los procesos.
mutate()
La función mutate() crea nuevas variables en un data frame, las cuales se expresan como funciones de variables existentes. También puede utilizarse para recalcular una variable ya existente.
En el siguiente bloque de código, se utiliza mutate()
para crear una nueva variable en el data frame de ríos. Se utilizan también otras funciones para renombrar las columnas y desplegar los datos.
# Despliegue de la estructura del data frame
str(rios)
'data.frame': 3845 obs. of 3 variables:
$ Tiempo : chr "6/22/1973" "6/23/1973" "6/24/1973" "6/25/1973" ...
$ Pandora.mm..637km2.: num 7.46 6.17 6.32 7.8 7.72 7.83 5.02 3.84 3.21 2.77 ...
$ Banano.mm..90km2. : num 21 14.8 27.6 19.7 15.2 ...
# Despliegue de los primeros registros
slice_head(rios, n = 5)
Tiempo Pandora.mm..637km2. Banano.mm..90km2.
1 6/22/1973 7.46 21.02
2 6/23/1973 6.17 14.78
3 6/24/1973 6.32 27.65
4 6/25/1973 7.80 19.68
5 6/26/1973 7.72 15.17
# Cambio de nombre de las columnas mediante rename()
rios <-
rios %>%
rename(fecha = Tiempo,
pandora = Pandora.mm..637km2.,
banano = Banano.mm..90km2.)
# Conversión de una columna a tipo Date y creación de una nueva columna
rios <-
rios %>%
mutate(fecha = as.Date(fecha, format = "%m/%d/%Y"),
promedio = (pandora + banano) / 2)
# Verificación de los cambios en la estructura del data frame
str(rios)
'data.frame': 3845 obs. of 4 variables:
$ fecha : Date, format: "1973-06-22" ...
$ pandora : num 7.46 6.17 6.32 7.8 7.72 7.83 5.02 3.84 3.21 2.77 ...
$ banano : num 21 14.8 27.6 19.7 15.2 ...
$ promedio: num 14.2 10.5 17 13.7 11.4 ...
# Visualización de los valores de la nueva columna
slice_head(rios, n = 5)
fecha pandora banano promedio
1 1973-06-22 7.46 21.02 14.240
2 1973-06-23 6.17 14.78 10.475
3 1973-06-24 6.32 27.65 16.985
4 1973-06-25 7.80 19.68 13.740
5 1973-06-26 7.72 15.17 11.445
select()
La función select() selecciona variables (i.e. columnas) de un data frame con base en sus nombres.
En el siguiente bloque de código, se utiiza select()
para seleccionar un conjunto de variables del data frame de COVID-19 en Costa Rica. El resultado se guarda en un nuevo data frame.
# Selección, renombramiento y conversión de columnas
covid_columnas_seleccionadas <-
covid %>%
select(FECHA, muj_posi, hom_posi) %>%
rename(
fecha = FECHA,
positivos_mujeres = muj_posi,
positivos_hombres = hom_posi
) %>%
mutate(fecha = as.Date(fecha, format = "%d/%m/%Y"))
# Despliegue de una muestra aleatoria de los registros
slice_sample(covid_columnas_seleccionadas, n = 5)
fecha positivos_mujeres positivos_hombres
1 2021-01-29 95173 98103
2 2020-07-07 2339 3147
3 2020-05-01 346 379
4 2021-02-26 100725 103616
5 2021-01-21 92722 95755
filter()
La función filter() selecciona observaciones (i.e. filas) de un data frame con base en sus valores.
En el siguiente bloque de código, se utiliza filter()
para filtrar el data frame de COVID-19 en Costa Rica. El resultado se guarda en un nuevo data frame.
# Selección, renombramiento, conversión de columnas y filtrado
covid_filtrado <-
covid %>%
select(FECHA, nue_posi) %>%
rename(fecha = FECHA, positivos_nuevos = nue_posi) %>%
mutate(fecha = as.Date(fecha, format = "%d/%m/%Y")) %>%
filter(positivos_nuevos >= 2500)
# Despliegue del data frame con los resultados
covid_filtrado
fecha positivos_nuevos
1 2021-04-29 2781
2 2021-04-30 2609
3 2021-05-05 2555
4 2021-05-06 2559
5 2021-05-12 3173
arrange()
La función arrange() cambia el orden de las observaciones (i.e. filas) de un dataframe.
En el siguiente bloque de código, se utiliza arrange()
para ordenar el data frame de COVID-19 en Costa Rica, después de filtrarlo. El resultado se guarda en un nuevo data frame.
# Selección, renombramiento, filtrado y conversión de columnas
covid_filtrado_ordenado_x_positivos_nuevos <-
covid %>%
select(FECHA, nue_posi) %>%
rename(fecha = FECHA, positivos_nuevos = nue_posi) %>%
mutate(fecha = as.Date(fecha, format = "%d/%m/%Y")) %>%
filter(positivos_nuevos >= 2500) %>%
arrange(desc(positivos_nuevos))
# Despliegue del data frame con los resultados
covid_filtrado_ordenado_x_positivos_nuevos
fecha positivos_nuevos
1 2021-05-12 3173
2 2021-04-29 2781
3 2021-04-30 2609
4 2021-05-06 2559
5 2021-05-05 2555
summarise()
La función summarise() agrupa y resume valores de un data frame. Generalmente, se utiliza conjuntamente con group_by(), para agrupar antes los datos.
En el siguiente bloque de código, se utiliza summarise()
para generar un nuevo data frame con los nuevos casos de COVID-19 sumarizados por mes.
# Selección, renombramiento, filtrado y conversión de columnas
covid_positivos_nuevos_sumarizado_x_mes <-
covid %>%
select(FECHA, nue_posi) %>%
rename(fecha = FECHA, positivos_nuevos = nue_posi) %>%
mutate(fecha = as.Date(fecha, format = "%d/%m/%Y")) %>%
group_by(anio = format(fecha,"%Y"), mes = format(fecha,"%m")) %>%
summarise(suma_positivos = sum(positivos_nuevos))
# Despliegue del data frame con los resultados
covid_positivos_nuevos_sumarizado_x_mes
# A tibble: 15 x 3
# Groups: anio [2]
anio mes suma_positivos
<chr> <chr> <int>
1 2020 03 347
2 2020 04 372
3 2020 05 337
4 2020 06 2403
5 2020 07 14361
6 2020 08 23467
7 2020 09 34473
8 2020 10 34211
9 2020 11 29667
10 2020 12 29683
11 2021 01 24959
12 2021 02 10626
13 2021 03 12440
14 2021 04 33645
15 2021 05 25896
If you see mistakes or want to suggest changes, please create an issue on the source repository.
Text and figures are licensed under Creative Commons Attribution CC BY-SA 4.0. Source code is available at https://github.com/gf0604-procesamientodatosgeograficos/2021i-leccion-13/, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".