Este cuaderno presenta un ejemplo sencillo para la lectura y procesamiento de las estadísticas agrícolas de la Evaluación Agropecuaria (EVA) correspondientes al periodo 2019-2022, publicadas por la Unidad de Planificación Rural Agropecuaria (UPRA).
A lo largo del documento se desarrollan procedimientos para importar archivos de Excel, inspeccionar su estructura, seleccionar subconjuntos de información y exportar los resultados obtenidos.
El objetivo es fortalecer las habilidades básicas en el manejo y transformación de datos agrícolas utilizando R, facilitando la preparación de la información para análisis posteriores.
Se prepara el entorno de trabajo y se cargarán las librerías necesarias para la lectura y manipulación de datos agrícolas.
La función rm(list = ls()) elimina todos los objetos
almacenados en la memoria temporal de R. Esta práctica permite iniciar
el análisis en un entorno limpio, evitando conflictos con objetos
creados en sesiones anteriores.
rm(list = ls())
En este cuaderno se emplean diferentes librerías de R para la lectura, manipulación y exportación de datos tabulares.
La librería readxl permite importar archivos de Microsoft Excel (.xlsx) al entorno de trabajo de R.
La librería dplyr facilita la manipulación de datos mediante funciones para filtrar, seleccionar, agrupar y resumir información.
La librería readr proporciona herramientas para la lectura y escritura de archivos de texto y valores separados por comas (CSV), permitiendo exportar los resultados obtenidos durante el análisis.
Si las librerías no están instaladas, se pueden instalar con la
función install.packages() desde la consola de R.
# install.packages("readxl")
# install.packages("dplyr")
# install.packages("readr")
La función library() permite cargar los paquetes
instalados al entorno de trabajo, activando sus funciones para ser
utilizadas durante el análisis de datos.
library(readxl)
library(dplyr)
library(readr)
Antes de importar la información, es conveniente verificar los archivos disponibles en el directorio de trabajo.
list.files("D:/Geomatica Basica (Gr 2)/GB2/Proyecto2/datos")
## [1] "20250617_BaseAgricola20192024.xlsx" "Choco"
## [3] "Chocó.gpkg" "choco_buffer.gpkg"
## [5] "choco_ciudades.gpkg" "choco_curvas_nivel.cpg"
## [7] "choco_curvas_nivel.dbf" "choco_curvas_nivel.prj"
## [9] "choco_curvas_nivel.shp" "choco_curvas_nivel.shx"
## [11] "choco_elevacion.tif" "choco_elevacion.tif.aux.xml"
## [13] "choco_municipios.gpkg" "choco_municipios_MAGMA.gpkg"
## [15] "choco_municipios_UTM18N.gpkg" "choco_rangos_elevacion.cpg"
## [17] "choco_rangos_elevacion.dbf" "choco_rangos_elevacion.prj"
## [19] "choco_rangos_elevacion.shp" "choco_rangos_elevacion.shx"
## [21] "choco_relieve.tif" "choco_relieve.tif.aux.xml"
## [23] "choco_relieve.txt" "choco_rios.gpkg"
## [25] "choco_vias.gpkg" "Ciudades de Colombia.gpkg"
## [27] "Ciudades de Santander.gpkg" "Ciudades del mundo"
## [29] "COL_adm" "COL_adm2.cpg"
## [31] "COL_adm2.csv" "COL_adm2.dbf"
## [33] "COL_adm2.prj" "COL_adm2.shp"
## [35] "COL_adm2.shx" "COL_alt_tif"
## [37] "COL_msk_alt_tif" "COL_msk_cov_tif"
## [39] "COL_rds" "COL_wat"
## [41] "Colombia" "Santander"
## [43] "Tierra"
La función list.files() permite visualizar los archivos
almacenados en el directorio de trabajo actual. Esta verificación
facilita la identificación del archivo que contiene la base de datos de
la Evaluación Agropecuaria (EVA) y confirma que el archivo se encuentra
disponible para su lectura desde R.
En este caso, el archivo de interés es 20250617_BaseAgricola20192024.xlsx, el cual corresponde a la versión depurada de la base de datos original.
Debido a que el archivo de Excel contiene una única hoja de trabajo, se procede a su importación directa en R.
EVA <- read_excel("D:/Geomatica Basica (Gr 2)/GB2/Proyecto2/datos/20250617_BaseAgricola20192024.xlsx")
EVA
## # A tibble: 141,073 × 18
## `Codigo Dane departamento` Departamento `Codigo Dane municipio` Municipio
## <chr> <chr> <chr> <chr>
## 1 05 Antioquia 05001 Medellín
## 2 05 Antioquia 05001 Medellín
## 3 05 Antioquia 05001 Medellín
## 4 05 Antioquia 05001 Medellín
## 5 05 Antioquia 05001 Medellín
## 6 05 Antioquia 05001 Medellín
## 7 05 Antioquia 05001 Medellín
## 8 05 Antioquia 05001 Medellín
## 9 05 Antioquia 05001 Medellín
## 10 05 Antioquia 05001 Medellín
## # ℹ 141,063 more rows
## # ℹ 14 more variables: `Desagregacion cultivo` <chr>, Cultivo <chr>,
## # `Ciclo del cultivo` <chr>, `Grupo cultivo` <chr>, Subgrupo <chr>,
## # Año <dbl>, Periodo <chr>, `Area sembrada (ha)` <dbl>,
## # `Area cosechada (ha)` <dbl>, `Produccion (t)` <dbl>,
## # `Rendimiento (t/ha)` <dbl>, `Nombre cientifico del cultivo` <chr>,
## # `Codigo del cultivo` <dbl>, `Estado fisico del cultivo` <chr>
La función read_excel() del paquete readxl
permite importar archivos de Excel directamente al entorno de R. En este
caso, el archivo se carga como un objeto denominado EVA.
El conjunto de datos contiene 141.073 registros y 18 variables, lo que corresponde a información agrícola a nivel nacional, organizada por departamento, municipio y cultivo.
Dado que el análisis se enfoca en un departamento específico, se procede a filtrar la base de datos EVA para conservar únicamente la información correspondiente al departamento de Chocó.
choco <- dplyr::filter(EVA, Departamento == "Chocó")
choco
## # A tibble: 2,869 × 18
## `Codigo Dane departamento` Departamento `Codigo Dane municipio` Municipio
## <chr> <chr> <chr> <chr>
## 1 27 Chocó 27001 Quibdó
## 2 27 Chocó 27001 Quibdó
## 3 27 Chocó 27001 Quibdó
## 4 27 Chocó 27001 Quibdó
## 5 27 Chocó 27001 Quibdó
## 6 27 Chocó 27001 Quibdó
## 7 27 Chocó 27001 Quibdó
## 8 27 Chocó 27001 Quibdó
## 9 27 Chocó 27001 Quibdó
## 10 27 Chocó 27001 Quibdó
## # ℹ 2,859 more rows
## # ℹ 14 more variables: `Desagregacion cultivo` <chr>, Cultivo <chr>,
## # `Ciclo del cultivo` <chr>, `Grupo cultivo` <chr>, Subgrupo <chr>,
## # Año <dbl>, Periodo <chr>, `Area sembrada (ha)` <dbl>,
## # `Area cosechada (ha)` <dbl>, `Produccion (t)` <dbl>,
## # `Rendimiento (t/ha)` <dbl>, `Nombre cientifico del cultivo` <chr>,
## # `Codigo del cultivo` <dbl>, `Estado fisico del cultivo` <chr>
En este caso, la función filter() del paquete
dplyr permite seleccionar únicamente las observaciones
asociadas al departamento de Chocó, generando un nuevo objeto denominado
choco.
Este subconjunto contiene los registros agrícolas correspondientes a este departamento, incluyendo información por municipio y tipo de cultivo.
Para restringir aún más el análisis, se puede filtrar la información por año:
choco_2022 <- dplyr::filter(choco, `Año` == 2022)
choco_2022
## # A tibble: 490 × 18
## `Codigo Dane departamento` Departamento `Codigo Dane municipio` Municipio
## <chr> <chr> <chr> <chr>
## 1 27 Chocó 27001 Quibdó
## 2 27 Chocó 27001 Quibdó
## 3 27 Chocó 27001 Quibdó
## 4 27 Chocó 27001 Quibdó
## 5 27 Chocó 27001 Quibdó
## 6 27 Chocó 27001 Quibdó
## 7 27 Chocó 27001 Quibdó
## 8 27 Chocó 27001 Quibdó
## 9 27 Chocó 27001 Quibdó
## 10 27 Chocó 27001 Quibdó
## # ℹ 480 more rows
## # ℹ 14 more variables: `Desagregacion cultivo` <chr>, Cultivo <chr>,
## # `Ciclo del cultivo` <chr>, `Grupo cultivo` <chr>, Subgrupo <chr>,
## # Año <dbl>, Periodo <chr>, `Area sembrada (ha)` <dbl>,
## # `Area cosechada (ha)` <dbl>, `Produccion (t)` <dbl>,
## # `Rendimiento (t/ha)` <dbl>, `Nombre cientifico del cultivo` <chr>,
## # `Codigo del cultivo` <dbl>, `Estado fisico del cultivo` <chr>
De esta manera, se obtiene una base de datos más específica que contiene únicamente los registros del año 2022 para el departamento de Chocó, lo cual facilita el análisis temporal de la producción agrícola.
A partir del conjunto de datos filtrado para el año 2022 en el departamento de Chocó, se selecciona el grupo de cultivos de interés y se resume la producción por municipio.
choco_2022 %>%
group_by(`Codigo Dane municipio`, Municipio, `Grupo cultivo`) %>%
filter(`Grupo cultivo` == "Frutales") %>%
summarize(max_prod = max(`Produccion (t)`, na.rm = TRUE)) %>%
arrange(desc(max_prod)) -> frutales2022
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by Codigo Dane municipio, Municipio, and
## Grupo cultivo.
## ℹ Output is grouped by Codigo Dane municipio and Municipio.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(Codigo Dane municipio, Municipio, Grupo cultivo))` for
## per-operation grouping (`?dplyr::dplyr_by`) instead.
frutales2022
## # A tibble: 30 × 4
## # Groups: Codigo Dane municipio, Municipio [30]
## `Codigo Dane municipio` Municipio `Grupo cultivo` max_prod
## <chr> <chr> <chr> <dbl>
## 1 27150 Carmen del Darién Frutales 136000
## 2 27615 Riosucio Frutales 33348
## 3 27001 Quibdó Frutales 21714
## 4 27800 Unguía Frutales 9806.
## 5 27099 Bojayá Frutales 9750
## 6 27660 San José del Palmar Frutales 6490
## 7 27430 Medio Baudó Frutales 6021
## 8 27425 Medio Atrato Frutales 5152
## 9 27077 Bajo Baudó Frutales 4371
## 10 27495 Nuquí Frutales 4050
## # ℹ 20 more rows
El resultado permite identificar los municipios con mayor producción dentro del grupo de cultivos seleccionados, facilitando el análisis comparativo entre territorios del departamento.
Para guardar el resultado del análisis, se exporta el conjunto de datos a un archivo en formato CSV utilizando la librería readr.
write_csv(frutales2022, "choco_frutales_2022.csv")
La función write_csv() permite guardar objetos de R en
un archivo externo, facilitando su reutilización en otros análisis o
programas.
Luego, se verifica que el archivo se haya creado correctamente en el directorio de trabajo:
list.files()
## [1] "choco_frutales_2022.csv" "choco_munic.gpkg"
## [3] "choco_pendiente.tif" "choco_pendiente.tif.aux.xml"
## [5] "cuaderno1.html" "cuaderno1.nb.html"
## [7] "cuaderno1.pdf" "cuaderno1.Rmd"
## [9] "cuaderno2.html" "cuaderno2.nb.html"
## [11] "cuaderno2.Rmd" "cuaderno3.nb.html"
## [13] "cuaderno3.Rmd" "datos"
## [15] "municipios.gpkg" "Proyecto2.qgz"
## [17] "rsconnect" "RScript.R"
Para comprobar que la información se exportó correctamente, se vuelve a leer el archivo:
los_datos22 <- read_csv(
"choco_frutales_2022.csv",
locale = locale(encoding = "Latin1")
)
## Rows: 30 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): Municipio, Grupo cultivo
## dbl (2): Codigo Dane municipio, max_prod
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
los_datos22
## # A tibble: 30 × 4
## `Codigo Dane municipio` Municipio `Grupo cultivo` max_prod
## <dbl> <chr> <chr> <dbl>
## 1 27150 Carmen del Darién Frutales 136000
## 2 27615 Riosucio Frutales 33348
## 3 27001 Quibdó Frutales 21714
## 4 27800 UnguÃa Frutales 9806.
## 5 27099 Bojayá Frutales 9750
## 6 27660 San José del Palmar Frutales 6490
## 7 27430 Medio Baudó Frutales 6021
## 8 27425 Medio Atrato Frutales 5152
## 9 27077 Bajo Baudó Frutales 4371
## 10 27495 Nuquà Frutales 4050
## # ℹ 20 more rows
Al leer el archivo, R reconoce automáticamente los tipos de datos de cada columna, mostrando la estructura del conjunto exportado.
En algunos casos, los códigos de los municipios pueden ser interpretados como valores numéricos. Si es necesario, se puede corregir este tipo de dato:
los_datos22 <- los_datos22 %>%
mutate(`Codigo Dane municipio` = as.character(`Codigo Dane municipio`))
head(los_datos22)
## # A tibble: 6 × 4
## `Codigo Dane municipio` Municipio `Grupo cultivo` max_prod
## <chr> <chr> <chr> <dbl>
## 1 27150 Carmen del Darién Frutales 136000
## 2 27615 Riosucio Frutales 33348
## 3 27001 Quibdó Frutales 21714
## 4 27800 UnguÃa Frutales 9806.
## 5 27099 Bojayá Frutales 9750
## 6 27660 San José del Palmar Frutales 6490
De esta manera, se asegura la consistencia de los identificadores geográficos para futuros análisis o uniones con datos espaciales.
La producción de cultivos frutales en el departamento de Chocó presenta una distribución espacial heterogénea, con una fuerte concentración en ciertos municipios como Carmen del Darién y Riosucio. Mientras algunos territorios muestran alta producción, otros presentan valores significativamente menores, lo que sugiere diferencias en condiciones agroecológicas, infraestructura y niveles de desarrollo agrícola.
La función sessionInfo() permite registrar el entorno de
trabajo utilizado para el análisis en R.
Esto incluye la versión de R, el sistema operativo y los paquetes cargados, lo cual es importante para garantizar la reproducibilidad del análisis.
sessionInfo()
## R version 4.6.0 (2026-04-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8 LC_CTYPE=Spanish_Colombia.utf8
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Colombia.utf8
##
## time zone: America/Bogota
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] readr_2.2.0 dplyr_1.2.1 readxl_1.5.0
##
## loaded via a namespace (and not attached):
## [1] crayon_1.5.3 vctrs_0.7.3 cli_3.6.6 knitr_1.51
## [5] rlang_1.2.0 xfun_0.58 generics_0.1.4 jsonlite_2.0.0
## [9] bit_4.6.0 glue_1.8.1 htmltools_0.5.9 sass_0.4.10
## [13] hms_1.1.4 rmarkdown_2.31 cellranger_1.1.0 evaluate_1.0.5
## [17] jquerylib_0.1.4 tibble_3.3.1 tzdb_0.5.0 fastmap_1.2.0
## [21] yaml_2.3.12 lifecycle_1.0.5 compiler_4.6.0 pkgconfig_2.0.3
## [25] rstudioapi_0.19.0 digest_0.6.39 R6_2.6.1 utf8_1.2.6
## [29] tidyselect_1.2.1 parallel_4.6.0 vroom_1.7.1 pillar_1.11.1
## [33] magrittr_2.0.5 bslib_0.11.0 bit64_4.8.2 tools_4.6.0
## [37] cachem_1.1.0
Lizarazo, I. (2023). How to read and subset .xlsx agricultural statistics data. RPubs. https://rpubs.com/ials2un/okra_vez_eva