This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Cmd+Shift+Enter.
R es un lenguaje de programación y un entorno de software libre utilizado principalmente para análisis estadístico y gráficos. Nació como una implementación del lenguaje S, desarrollado en los laboratorios Bell. A lo largo del tiempo, R ha evolucionado para convertirse en una herramienta indispensable para la ciencia de datos, la bioinformática, la investigación académica y más.
RStudio es un entorno de desarrollo integrado (IDE) para R. Proporciona una consola, un editor de scripts que soporta la ejecución directa de código, así como herramientas para la visualización de datos y la gestión del espacio de trabajo. RStudio ha facilitado el uso de R al ofrecer una interfaz más amigable y herramientas útiles para el análisis.
En la
consola se ejecuta el código R en tiempo real. Los
usuarios pueden ingresar comandos directamente y ver los resultados al
instante.
Editor de scripts: El editor de código permite escribir y editar scripts en R. Resalta la sintaxis del código. Proporciona sugerencias de código y autocompletado. Tiene botones para ejecutar líneas o bloques de código específicos. Es justo donde estoy escribiendo este script.
Environment: El Entorno o Environment muestra los objetos (vectores, matrices, data frames, etc.) que están en el entorno global. Ofrece la opción de importar conjuntos de datos. El “entorno global” se refiere al espacio de trabajo de nivel superior donde las variables, funciones y otros objetos que creas se almacenan de manera predeterminada durante una sesión interactiva. Es el lugar donde se guardan y se pueden acceder a las variables que defines y a los datos que cargas, a menos que se especifique o utilic un entorno diferente.
Historial: Muestra un registro de los comandos previamente ejecutados en la consola.
Archivos: Proporciona una vista del sistema de archivos, lo que permite navegar, abrir, y gestionar archivos y directorios.
Plots: Muestra gráficos generados por el código R. Permite navegar entre varios gráficos y exportarlos en diversos formatos.
Paquetes: Enumera todos los paquetes R instalados. Permite instalar, actualizar o cargar/descargar paquetes con facilidad.
Ayuda: Proporciona acceso a la documentación de funciones y paquetes de R. Permite buscar y consultar la documentación de funciones específicas.
Visor: Se utiliza para visualizar contenidos web, como mapas interactivos o documentos R Markdown renderizados.
En RStudio se pueden crear archivos o proyectos. La diferencia entre un archivo y un proyecto es importante y tiene que ver con la organización, gestión y reproducibilidad de tu trabajo.
-Un archivo en R suele tener una extensión .R o .Rmd (para R Markdown). Contiene código R, comentarios y, en el caso de R Markdown, también puede contener texto enriquecido, ecuaciones, etc. -Se utiliza para escribir, guardar y ejecutar código R.
-Un archivo es una entidad independiente. Puede moverse, compartirse o ejecutarse sin necesidad de otros archivos, a menos que explícitamente dependa de otros (por ejemplo, si carga datos de otro archivo).
Con RStudio se pueden crear diferentes tipos de archivos. Vamos a mencionar 3 que son muy comunes.
Archivos de código que contienen secuencias de comandos y funciones en R.
Documentos que integran código R con texto narrativo, permitiendo la creación de informes, presentaciones y otros documentos que pueden ser renderizados en diversos formatos como HTML, PDF y Word.Si bien los notebooks generalmente se visualizan mejor como documentos HTML, con R Markdown puedes fácilmente renderizar a múltiples formatos, incluidos PDF, Word o presentaciones. Flujo de Trabajo Lineal: En un documento R Markdown tradicional, normalmente trabaja en el código y el contenido, y luego renderiza todo el documento de una vez para ver los resultados. Esto es útil cuando ya tiene un análisis establecido que desea ejecutar de principio a fin. Se usan si se requiere generar informes que documenten el código.
Una variante de R Markdown donde puede ejecutar y ver resultados en línea. Permiten ejecutar bloques de código individualmente e inmediatamente ver los resultados debajo de ese bloque, similar a cómo funcionan los Jupyter Notebooks en Python. Es útil para un análisis exploratorio donde desea iterar rápidamente y ver los resultados al instante. Es decir que puede ver el código, los resultados y el texto en un formato casi final mientras trabaja, por lo que resulta útil para construir y refinar análisis y documentarlos simultáneamente ¡Esto es un notebook!
Ambas opciones, Notebook y R Markdown, tienen sus fortalezas y son adecuadas para diferentes escenarios. Si está en una fase exploratoria, iterativa y deseas ver resultados al instante, un notebook puede ser la mejor opción. Si está trabajando en un informe, artículo o análisis más estructurado y formal que requiere un flujo deAmbas opciones, Notebook y R Markdown, tienen sus fortalezas y son adecuadas para diferentes escenarios. Si está en una fase exploratoria, iterativa y desea ver resultados al instante, un notebook puede ser la mejor opción. Si está trabajando en un informe, artículo o análisis más estructurado y formal que requiere un flujo de trabajo más lineal y opcidcones de salida diversificadas, un documento R Markdown podría ser más adecuado. En cualquier caso, recuerde que puedes cambiar entre las experiencias de Notebook y Documento en RStudio con facilidad, por lo que no está estrictamente limitado a una elección u otra.
-Un proyecto en RStudio no es solo un archivo, sino un entorno de trabajo completo. Cuando crea un proyecto, RStudio genera un archivo con extensión .Rproj que guarda las configuraciones y el estado del proyecto.
-Los proyectos se utilizan para organizar conjuntos relacionados de archivos y datos. Facilitan la gestión de directorios de trabajo, rutas relativas y otras configuraciones específicas del proyecto.
-Entorno de trabajo: Cuando abre un proyecto, RStudio automáticamente configura el directorio de trabajo en la ubicación del proyecto. Esto es útil para garantizar que el código sea reproducible, ya que puede usar rutas relativas en lugar de rutas absolutas.
-Los proyectos de RStudio se integran bien con sistemas de control de versiones como Git, facilitando la gestión de versiones y colaboración.
-Al trabajar en un proyecto más grande, es posible que tengas múltiples scripts, conjuntos de datos y otros archivos relacionados. Los proyectos te ayudan a mantener todo organizado en un solo lugar.
-Un proyecto puede tener configuraciones específicas, como opciones de codificación, que no afectan a otros proyectos o scripts fuera del proyecto.
En resumen, mientras que un archivo en R es simplemente un documento que contiene código R, un proyecto en RStudio es un entorno de trabajo organizativo que facilita la gestión y reproducibilidad de trabajos más complejos y multifacéticos. Es especialmente útil cuando está trabajando en análisis más grandes o colaborativos.
EEn R, las funcionalidades se amplían mediante paquetes o librerías. Algunos paquetes actuales para el manejo de datos espaciales incluyen:
Históricamente se utilizaron paquetes como sp, raster y rgdal, pero gran parte de su funcionalidad ha sido reemplazada por sf y terra, que son los paquetes recomendados para proyectos nuevos.
Observará que cuando trabajamos en un notebook, el código que se
puede ejecutar se escribe así ** {r} código**. Puede
ejecutarlo haciendo click sobre el símbolo de play. - Si la versión de R
con la que trabaja es antigua, puede que se generen errores y requiera
descargar un paquete de herramientas para la versión de R con la que
trabajan. Puede descargar esta última versión en https://cran.rstudio.com/bin/windows/Rtools/.
# Ejecute este chunk una sola vez
pkgs <- c("sf", "terra", "dplyr", "ggplot2", "readr")
# Identifica cuáles de estos paquetes NO están instalados
to_install <- setdiff(pkgs, rownames(installed.packages()))
# Si falta alguno, lo instala desde CRAN (junto con sus dependencias)
#if (length(to_install)) install.packages(to_install, dependencies = TRUE)
Ojo, solo puede ejecutar los códigos desde el editor de código de RStudio, no desde la visualización (renderización) en html.
¿A propósito, ya sabe cómo agregar una imagen a
su notebook?. ¿Ya identificó cómo agregar
color al texto que use para documentar su código?.
Ahora cargaremos las librerías. No es suficiente instalarlas, tenemos
que decir explícitamente que vamos a traerlas a nuestro código.
El paquete sf (simple features) ofrece una amplia variedad de funcionalidades para trabajar con datos espaciales tipo vector como representación de datos espaciales, leere y escribir en variedad de formatos (ej. shp, GeoJSON, KML, entre otros), integración con librerías como GDAL que permite gestionar datos geoespaciale; manipular geometrías para calcular área, longitudes, etc; realizar operaciones topológicas, manipulación de sistemas de coordenadas; integración con otros paquetes de R; realizar operaciones de geoprocesamiento como buffer, clip, entre otras; así como manipulación de atributos (agregar, eliminar, modificar.
Representación de Datos Espaciales:
library(sf)
## Linking to GEOS 3.14.1, GDAL 3.12.1, PROJ 9.7.1; sf_use_s2() is TRUE
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Primero revise cuál es la ubicación de s directorio de trabajo actual usando getwd.
getwd()
## [1] "C:/Users/UN-FCA-2368554/OneDrive - Universidad Nacional de Colombia/1_Periodos_Asignaturas/Cursos_2026_1/GB_20261/Practical/Introduction_R_Rstudio/Proyecto_introd_R"
En programación, a menudo se requiere almacenar información para
usarla más adelante. Aquí es donde entran las variables. Una variable
puede ser imaginada como una caja en la que se guarda alguna
información. Esta “caja” tiene un nombre, y siempre que quiera acceder a
la información, simplemente usa el nombre de la variable. En R, se usa
el símbolo <- para asignar un valor a una variable. Lo primero que
vamos a hacer es instalar las librerías o paquetes con los que podremos
realizar las operaciones y análisis.
La variable shp_ruta almacenará la ruta al archivo shp. Reemplace la
ruta de ejemplo por la ruta correspondiente en su propio computador,
donde haya guardado la carpeta del curso.
# Usa la ruta relativa al shapefile con los datos
shp_ruta <- "./datos/mun_santander_boyaca.shp"
vector_municipios <- st_read(shp_ruta)
## Reading layer `mun_santander_boyaca' from data source
## `C:\Users\UN-FCA-2368554\OneDrive - Universidad Nacional de Colombia\1_Periodos_Asignaturas\Cursos_2026_1\GB_20261\Practical\Introduction_R_Rstudio\Proyecto_introd_R\datos\mun_santander_boyaca.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 210 features and 90 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -74.66496 ymin: 4.655196 xmax: -71.94885 ymax: 8.14501
## Geodetic CRS: MAGNA-SIRGAS
Notará que en la medida en que se crean variables, estás empiezan a aparecer en el panel Global Environment.
La siguiente línea usa funcionalidades de la librería sf para leer el shapefile disponible en la ruta shp_ruta como un archivo espacial y lo almacena en la variable vector_municipios.
vector_municipios <- st_read(shp_ruta)
## Reading layer `mun_santander_boyaca' from data source
## `C:\Users\UN-FCA-2368554\OneDrive - Universidad Nacional de Colombia\1_Periodos_Asignaturas\Cursos_2026_1\GB_20261\Practical\Introduction_R_Rstudio\Proyecto_introd_R\datos\mun_santander_boyaca.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 210 features and 90 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -74.66496 ymin: 4.655196 xmax: -71.94885 ymax: 8.14501
## Geodetic CRS: MAGNA-SIRGAS
La línea siguiente simplemente imprime la información de la variable vector_municipios en la consola. Como es un objeto espacial mostrará un resumen de ese objeto, así como todos los atributos y registros. ¿Qué información puede identificar ?.
vector_municipios
A veces solo requerimos ver los primeros registros para conocer la estructura general de la tabla de atributos. Podemos limitar el número de registros que se muestran al llamar la variable vector_municipios incluyendo una línea de texto en la que especificamos cuántos registros queremos que se presenten.
# Establecer el número máximo de filas a imprimir
options(sf_max_print = 5)
vector_municipios
También podemos visualizar el listado de campos (atributos o columnas) a través de:
names(vector_municipios)
## [1] "DPTO_CCDGO" "MPIO_CCDGO" "MPIO_CNMBR" "MPIO_CDPMP" "VERSION"
## [6] "AREA" "LATITUD" "LONGITUD" "STCTNENCUE" "STP3_1_SI"
## [11] "STP3_2_NO" "STP3A_RI" "STP3B_TCN" "STP4_1_SI" "STP4_2_NO"
## [16] "STP9_1_USO" "STP9_2_USO" "STP9_3_USO" "STP9_4_USO" "STP9_2_1_M"
## [21] "STP9_2_2_M" "STP9_2_3_M" "STP9_2_4_M" "STP9_2_9_M" "STP9_3_1_N"
## [26] "STP9_3_2_N" "STP9_3_3_N" "STP9_3_4_N" "STP9_3_5_N" "STP9_3_6_N"
## [31] "STP9_3_7_N" "STP9_3_8_N" "STP9_3_9_N" "STP9_3_10" "STP9_3_99"
## [36] "STVIVIENDA" "STP14_1_TI" "STP14_2_TI" "STP14_3_TI" "STP14_4_TI"
## [41] "STP14_5_TI" "STP14_6_TI" "STP15_1_OC" "STP15_2_OC" "STP15_3_OC"
## [46] "STP15_4_OC" "TSP16_HOG" "STP19_EC_1" "STP19_ES_2" "STP19_EE_1"
## [51] "STP19_EE_2" "STP19_EE_3" "STP19_EE_4" "STP19_EE_5" "STP19_EE_6"
## [56] "STP19_EE_9" "STP19_ACU1" "STP19_ACU2" "STP19_ALC1" "STP19_ALC2"
## [61] "STP19_GAS1" "STP19_GAS2" "STP19_GAS9" "STP19_REC1" "STP19_REC2"
## [66] "STP19_INT1" "STP19_INT2" "STP19_INT9" "STP27_PERS" "STPERSON_L"
## [71] "STPERSON_S" "STP32_1_SE" "STP32_2_SE" "STP34_1_ED" "STP34_2_ED"
## [76] "STP34_3_ED" "STP34_4_ED" "STP34_5_ED" "STP34_6_ED" "STP34_7_ED"
## [81] "STP34_8_ED" "STP34_9_ED" "STP51_PRIM" "STP51_SECU" "STP51_SUPE"
## [86] "STP51_POST" "STP51_13_E" "STP51_99_E" "Shape_Leng" "Shape_Area"
## [91] "geometry"
La siguiente línea utiliza la función plot() para visualizar el objeto espacial almacenado en la variable vector_municipios.
El primer argumento es el objeto espacial que desea trazar, en este caso vector_municipios. El segundo argumento contiene el atributo (columna) “DPTO_CCDGO”.La función plot() utilizará los valores de esa columna para determinar cómo colorear las entidades en el mapa. Como “DPTO_CCDGO” es una columna que representa diferentes departamentos, cada departamento se coloreará de forma diferente según los valores de esta columna.
plot(vector_municipios)
## Warning: plotting the first 10 out of 90 attributes; use max.plot = 90 to plot
## all
Si le resulta muy pesado cargar todo el mapa completo, pruebe con el archivo mun_santander_boyaca.shp
¿Qué diferencia evidencia en la siguiente salida con respecto a la anterior? ¿Qué cambió en el código?
plot(vector_municipios["DPTO_CCDGO"])
Ahora usted cree su propia visualización por municipios. Es decir use otra variable para representar.
#Escriba su código acá
Verifique el sistema coordenado de la capa vector_municipios
st_crs(vector_municipios)
## Coordinate Reference System:
## User input: MAGNA-SIRGAS
## wkt:
## GEOGCRS["MAGNA-SIRGAS",
## DATUM["Marco Geocentrico Nacional de Referencia",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## CS[ellipsoidal,2],
## AXIS["geodetic latitude (Lat)",north,
## ORDER[1],
## ANGLEUNIT["degree",0.0174532925199433]],
## AXIS["geodetic longitude (Lon)",east,
## ORDER[2],
## ANGLEUNIT["degree",0.0174532925199433]],
## USAGE[
## SCOPE["Horizontal component of 3D system."],
## AREA["Colombia - onshore and offshore. Includes San Andres y Providencia, Malpelo Islands, Roncador Bank, Serrana Bank and Serranilla Bank."],
## BBOX[-4.23,-84.77,15.51,-66.87]],
## ID["EPSG",4686]]
La salida se interpreta así:
PROJCRS[“MAGNA-SIRGAS 2018 / Origen-Nacional”]: Indica que está utilizando el sistema de referencia proyectado “MAGNA-SIRGAS 2018 / Origen-Nacional”.
BASEGEOGCRS[“MAGNA-SIRGAS 2018”]: Define el sistema de coordenadas geográficas subyacente llamado “MAGNA-SIRGAS 2018”.
DATUM[…]: Proporciona detalles sobre el datum que está siendo utilizado.
ELLIPOSOID[“GRS 1980”,…]: Detalles sobre el elipsoide utilizado.
CONVERSION[“Colombia Transverse Mercator”]: Detalles sobre cómo se convierten las coordenadas geográficas a coordenadas planas. Aquí se utiliza la proyección “Transverse Mercator”.
PARAMETER[…]: Estos son parámetros específicos de la proyección. Por ejemplo, “Latitude of natural origin” y “Longitude of natural origin” son las coordenadas en las que la proyección tiene cero distorsión. “False easting” y “False northing” son desplazamientos añadidos para evitar coordenadas negativas.
CS[Cartesian,2], AXIS[…], AXIS[…]: Indica que se trata de un sistema de coordenadas cartesianas bidimensional, con un eje norte y un eje este.
USAGE[…], AREA[…]: Proporciona detalles sobre el uso y la área de aplicabilidad del sistema de referencia.
ID[“EPSG”..]: Es un identificador único para este sistema de coordenadas. En este caso, el EPSG 9377 corresponde al sistema “MAGNA-SIRGAS 2018 / Origen-Nacional” que se utiliza en Colombia.
Sistemas de Coordenadas y reproyecciones los datos #### La función st_transform hace parte del paquete sf y reproyecta las coordenadas de un conjunto de datos espaciales,
vector_municipios_reproject = st_transform(vector_municipios, 9377)
Escriba la línea para revisar el sistema de coordenadas de su capa reproyectada
#Esto es importante para documentar el código
st_crs(vector_municipios_reproject)
## Coordinate Reference System:
## User input: EPSG:9377
## wkt:
## PROJCRS["MAGNA-SIRGAS 2018 / Origen-Nacional",
## BASEGEOGCRS["MAGNA-SIRGAS 2018",
## DATUM["Marco Geocentrico Nacional de Referencia 2018",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## ID["EPSG",20046]],
## CONVERSION["Colombia Transverse Mercator",
## METHOD["Transverse Mercator",
## ID["EPSG",9807]],
## PARAMETER["Latitude of natural origin",4,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8801]],
## PARAMETER["Longitude of natural origin",-73,
## ANGLEUNIT["degree",0.0174532925199433],
## ID["EPSG",8802]],
## PARAMETER["Scale factor at natural origin",0.9992,
## SCALEUNIT["unity",1],
## ID["EPSG",8805]],
## PARAMETER["False easting",5000000,
## LENGTHUNIT["metre",1],
## ID["EPSG",8806]],
## PARAMETER["False northing",2000000,
## LENGTHUNIT["metre",1],
## ID["EPSG",8807]]],
## CS[Cartesian,2],
## AXIS["northing (N)",north,
## ORDER[1],
## LENGTHUNIT["metre",1]],
## AXIS["easting (E)",east,
## ORDER[2],
## LENGTHUNIT["metre",1]],
## USAGE[
## SCOPE["Cadastre, topographic mapping."],
## AREA["Colombia - onshore and offshore. Includes San Andres y Providencia, Malpelo Islands, Roncador Bank, Serrana Bank and Serranilla Bank."],
## BBOX[-4.23,-84.77,15.51,-66.87]],
## ID["EPSG",9377]]
Felicitaciones, usted ya ha reproyectado su conjunto de datos. Sin embargo, solo se encuentran almacenados en la memoria de R bajo el nombre de la variable vector_municipios_reproject. Si usted quiere guardar sus capa reproyectada en el almacenamiento de su computador requiere exportarlo aun archivo ( por ejemplo shapefile). Modifique el código ejemplo presentado y escriba una ruta válida para almacenar sus archivo shapfile. ¿A propósito, ya sabe en qué casos coloca ./ al inicio de su ruta?.
st_write(vector_municipios_reproject, "./mi_capa_reproyectada.shp")
## Writing layer `mi_capa_reproyectada' to data source
## `./mi_capa_reproyectada.shp' using driver `ESRI Shapefile'
## Writing 210 features with 90 fields and geometry type Polygon.
Realice una selección del departamento con el codigo 18 unicamente (Pista DPTO_CCDGO == 18)
%>% es un operador del paquete dplyr. Toma el objeto o resultado de la izquierda y lo “pasa” como el primer argumento a la función de la derecha. Es una manera concisa y legible de encadenar operaciones en R.
La función filter() del paquete dplyr se utiliza para filtrar filas en un dataframe (tabla con encabezados) o, en este caso, en un objeto sf basado en una condición.
DPTO_CCDGO == 18 es la condición que se usa para filtrar. Esta condición seleccionará todas las filas donde el valor de la columna DPTO_CCDGO es igual a 18.
depto_18 <- vector_municipios_reproject %>%
filter( DPTO_CCDGO == 18)
Visualice el mapa de municipios de depto_18
#Escriba acá su código
Ahora guarde en un archivo shapefile en su computador el contenido de depto_18
#Escriba acá su código
Abra en QGIS su capa original de municipios y su capa reproyectada. Haga lo mismo con la capa del municipio 18. Verifique los sistemas de referencia de cada capa. Son diferentes los sistemas de referencia? Cuál procedimiento le resulta más interesante para reproyectar datos espaciales QGIS o líneas de código en R?