Introducción a R y RStudio
Introducción a R y RStudio
2025-01-25
2
Contents
Introducción 5
¿Qué es R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
¿Qué es RStudio? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
¿De donde se puede descargar R y Rstudio? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Iniciando en R y RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
¿Cómo se crea un proyecto en RStudio? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
¿Cómo se crea un Script? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
¿Cómo instalar y nombrar una paquetería? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Tipo de operaciones 15
Suma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Resta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Multiplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
División . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Tipos de objetos 17
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Extraer un elemento de un vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Operaciones de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Transposición, determinante e inversa de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Marco de datos “data frame” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3
4 CONTENTS
Fusión de bases 41
Inner join (Intersección) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Full Join (Unión completa) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Left join (Unir a la izquierda) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Right join (Unir a la derecha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Mapas 51
¿Qué es un archivo .shp? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
¿Cómo importar un archivo .shp a R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Gráficando cartografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Realiazando mapas temáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Unión de mapa con base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Graficando mapa interactivo con plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Graficando mapa interactivo con ggplot2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Ejemplo práctico: Trazando mapa del PIB por entidad . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Introducción
¿Qué es R?
R es un lenguaje estadístico computacional, aunque también esta catalogado como de programación. Nació como
una reimplementación del lenguaje libre S.
Apareció en 1993 en Austria y hoy en día es una herramienta utilizada por estudiosos de la estadística, economía,
actuaría, matemáticas, biología diversas áreas requieran del análisis de datos.
Figure 2: *
Su implementación es diversa, pues con el paso del tiempo sus aplicaciones han alcanzado desde realizar grá-
ficos simples o avanzados, modelos de predicción, cartografía o simple análisis estadístico (ya sea descriptivo o
inferencial). Además también ha tenido desarrollo en la administración de bases de datos, tal como la manipu-
lación, limpieza y ordenamiento de datos, o desarrollos como Rmarkdown, Quatro que permiten realizar tareas
como la creación de documentos de textp (como este que estas leyendo) hasta aplicaciones interativas como
Shiny aplications.
¿Qué es RStudio?
5
6 CONTENTS
Figure 3: Ejemplo 1
Figure 4: *
Fue lanzado por primera vez como software libre en Febrero del 2011 por Joseph J. Allaire mediante una estructura
de Java, C++ y JavaScript1 .
Figure 6: *
Su uso es dinámico, puesto a que aparte de poder enlazar el languaje de R, se pueden elaborar reportes mediante
LaTex y la asociación de otros programas de computo, tales como Python, SQL, etc. Es por ello que es una interfaz
que ha cobrado mucho uso en diferentes áreas de estudio.
Para descagar R-project debes de ingresar a la siguiente dirección: [Link] donde ahí tendrás
tres opciones para diferentes sistemas operativos: Linux, macOS y Windows.
En nuestro caso seleccionaremos Windows, posterior a ello, tendremos una ventana como la siguiente:
1
Hay que recordar que estos lenguajes mencionados se utilizan para el desarollo de aplicaciones de computación, en este caso se usaron
para desarrollar el entorno de RStudio.
CONTENTS 7
Figure 7: Ejemplo 2
Figure 8: *
Figure 10: *
Posteior a ello, seleccionamos install R for the first time y en automático comenzará la descarga del archivo .exe
con el cual podrás instalar el lenguaje de R. Además de instalar R, en el caso de Windows hay que complementar
con RTools, esta herramienta permite compilar paquetes que provengan de otras estructuras (como C++), es por
ello que también se requiere.
Para proceder a instalar Rtools, es necesario dirigirse al sitio que aparece en la imagen anterior y seleccionar
Rtools installer y posteriormente realizar el proceso de instalación.
Para descargar RStudio nos dirigimos al siguinte enlace: [Link] donde po-
dremos encontrar la página que enlazará con el descargador de RStudio en la versión de escritorio gratuita.
Iniciando en R y RStudio
En esta sección podrás encontrar todo lo relacionado con los primeros pasos de R y RStudio, dividos en dos
subtemas, en los cuales se harán diversas explicaciones del uso de este lenguaje.
8 CONTENTS
Figure 12: *
Figure 14: *
Una vez instalado R, Rtoos al ejecutarlo encontrarás un interfaz muy similar a lo que es CMD o símbolo de sistema,
en el cual solo se pueden ejecutar códigos del propio lenguaje, sin poder elaborar algún archivo de memoria o de
serie de comandos que se puedan ejecutar automáticamente, es por ello que R suele ser un poco tedioso, ya que
solo se puede escribir una vez el código y si este resulta estar mal, tendrás que regresar y ver si permite corregir
dicho código, o en su defecto, reescribir el código.
RStudio
RStudio tiene una facilidad de manejo, puesto a que su interfaz permite una interacción más eficiente para admin-
istrar el trabajo, pues la pantalla se divide en diversos espacios, los cuales son:
• Script: Es un archvio con la extensión .R en el cual contiene lineas de comando, en el cual se pueden
escribir diversas instrucciones y ejecutar, pero que permite la corrección imediata del código sin necesidad
de regresarse o de reescribir todo el código.
• Objetos: Es un espacio donde se podrán visualizar diversos objetos, tales como: Dataframe, vectores de
valores, series de tiempo, objetos de clase, logicos, etc.
CONTENTS 9
Figure 16: *
• Consola: Espacio donde se refleja el proceso de ejecución de los comandos del lenguaje, es decir, es tal
cual la interfaz que se visualiza en R.
• Archivos, gráficos, paquetes y ayuda: Es una espacio donde se pueden visualizar los archivos de donde se
enruta el espacio de trabajo, también se reflejan los gráficos una vez ejecutados, además podemos observar
si las paqueterias instaladas estan en funcionamiento o simplemente no estan instaladas y por último, la
ventana de ayuda, visualiza la estructura o documentos de los comandos o paqueterias de R.
Figure 18: *
10 CONTENTS
Para poder elaborar un proyecto, en el cual se incluyan archivos .R (Script), bases de datos con extensiones .xlsx,
.dta, .csv o imagenes (.png) se requiere la siguinte ruta de RStudio. Para ello nos vamos a “File > New project”:
Figure 20: *
Posteior a ello, se elegirá “New Directory > New Project”, donde nombraremos el directorio y enrutaremos a una
carpeta donde solo contendrá el proyecto (lo anteior para facilidad de manipulación).
Figure 22: *
Para instalar una paqueteria en R, solo se debe seguir el siguiente comando (la libreria tseries es un ejemplo):
# paquetes<-c("ggplot2", "dplyr")
# [Link](paquetes, dependencies=TRUE)
library(tseries)
Pero de igualmanera, podemos llamar diversas liberías de forma simultanea con la ayuda de libraries que se
encuentra en la libreria easypackages:
library(easypackages)
Figure 24: *
Por último, podemos llamar funciones sin la necesidad de cargar la paqueteria completa, para ello utilizamos
dobles puntos (::) , pero la estructura es: paquete::función, tal como se mostrará a continuación.
x<-seq(1,20,1)
urca::summary(x)
Figure 26: *
14 CONTENTS
Tipo de operaciones
En R existen diversas operaciones, tales como: Suma, resta, multiplicación y división. Además de otro tipo de
funciones así como valores lógicos o de carácteres.
Suma
Para realizar una suma, es muy sencillo, simplemente se debe ocupar el operador “+” y con ello se ejecuta la
suma, por ejemplo:
5+2
## [1] 7
10+16
## [1] 26
1256+2378
## [1] 3634
Resta
Para realiazar una resta, solo se tiene que utilizar el simbolo “-” para indicar la operación, por ejemplo:
5-2
## [1] 3
15-34
## [1] -19
9873-3091
## [1] 6782
15
16 CONTENTS
Multiplicación
Cuando se requiere efectuar una mutiplicación, es necesario utilizar el símbolo **“*“**, con ello se puede realizar
la operación, por ejemplo:
6*12
## [1] 72
10*10
## [1] 100
35*89
## [1] 3115
División
Por último, para poder operar una división solo basta con utilizar “/”, ejemplo:
100/10
## [1] 10
25/195
## [1] 0.1282051
1/3
## [1] 0.3333333
Tipos de objetos
Variables
Dentro de R, existen diversos tipos de objetos, los cuales son diversos. Pero también se pueden asignar variables,
donde se otorga un valor a una letra o nombre en especifico, para realizar lo anterior se utiliza el operador <-, por
ejemplo:
# Variables númericas
x<-67
## [1] 67
5*x-43
## [1] 292
# Variables cualitativas
pais<-"Mexico"
pais
## [1] "Mexico"
Vectores
Este tipo de datos, son arreglos ordenados en los cuales se puede almacenar información de tipo númerico (vari-
ables cuantitativas), alfanúmerico (variables cualitativa) o un valor lógico (Falso y verdadero ó TRUE y FALSE),
pero que no son mezclas de estos. En R, para poder crear dicho vector, se utiliza el símbolo c() y que significa
concatenar.
Esta función almacena la información de forma vectorial, por ende se acostumbra a etiquetarlo con un nombre
corto y repreentativo del tipo de datos que contiene, ejemplo:
edad<-c(25,40,39,46,10,11,14,23,43)
deporte<-c(TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE,
FALSE, FALSE)
comic_fav<-c(NA,"Superman", "Batman", NA, "Shazam",
"Batman", "Superman", NA, "GreenLanter")
edad
17
18 CONTENTS
## [1] 25 40 39 46 10 11 14 23 43
deporte
## [1] TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
comic_fav
Para extraer un dato que se encuentre dentro de un vector, se hace uso del corchete “[]” y dentro del mismo solo
se coloa la posición en donde se encuenntra el dato, ejemplo:
edad[5]
## [1] 10
comic_fav[c(2,9)]
Por último, si se busca exceptuar un dato dentro de un vector solo se debe poner el valor como [-a] donde a es la
posición del dato a omitir, ejemplo:
deporte[-5]
Matrices
Las matrices son arreglos rectangulares de filas y columnas con información númerica, alfanúmerica o lógica.
Para crear unaa matriz, se utiliza la función matriz().
Ejemplos
Vamos a contruir diversas matrices, con la finalidad de demostrar que hay diferentes maneras de declarar una
matriz.
Para crear una matriz cuadrada:
CONTENTS 19
matriz1
matriz2
Otra forma de plantear matrices, es mediante vectores y con la función cbind() la cual une columnas, ejemplo:
vector1<-c(34,56,22)
vector2<-c(22,67,98)
vector3<-c(12,45,76)
matriz3
Ahora bien, si lo que se busca es acomodar los vectores por fila, se hace uso de rbind(), ejemplo:
matriz4
Operaciones de matrices
Para realizar diversas operaciones de matrices, se debe tomar en cuenta que las matrices a operar tienen que ser
cuadráticas (mismas filas y columnas), ya que de no ser así las operaciones tal vez no podrás realizarse.
Como ejemplos, se utilizarán las matrices 3 y 4 de los ejemplos anteriores.
20 CONTENTS
Suma
matriz5<- matriz3+matriz4
matriz5
Resta
matriz6<- matriz3-matriz4
matriz6
Multiplicación
matriz7<- matriz3%*%matriz4
matriz7
Transpocisón
Se utiliza para cambiar de lugares de las filas por columnas y viceversa en una matriz, en R, para realizar dicha
acción se utiliza t(), ejemplo:
matriz4
matrizt<-t(matriz4)
matrizt
Determinante
Se utiliza para obtener una forma multilineal alternada de un [Link] definición indica una serie de propiedades
matemáticas y generaliza el concepto de determinante haciédolo aplicable en numerosos campos, para realizar
dicha operación en R, se utiliza det(), ejemplo:
matriz3
matrizdet<-det(matriz3)
matrizdet
## [1] -496
Inversa
La inversa de una matriz se utiliza por la necesidad de dividir matrices, ya que en el algebra lineal o matricial, no
existe tal operación, es por ello que se genera el concepto de inversa.
Para realizar este proceso se requiere:
• Definir una matriz de diagonales (matriz de identidad), esto se realiza con el comando diag(1,nrow=n), se
debe definir la cantidad de 1 en la diagonal conforme al valor de la matriz cuadrática a invertir.
Ejemplo:
I<-diag(1, nrow = 3)
matriz3_inv<-solve(matriz3, I)
matriz3_inv
El marco de datos o data frame es uno de los objetos más utilizados porque permite agrupar varios vectores con
información de diferente tipo (númerico, alfanúmerico o lógico) en un mismo objeto, la unica restricción es que
todos los elementos deben contener el mismo espacio o dimensión.
Para generar un marco de datos en R, se utiliará la función [Link], ejemplo:
datos<-[Link](edad,deporte,comic_fav)
datos
Para poder recuperar las variables (columnas) contenidas en el marco de datos (data frame), se pueden usar
difrentes operadores: $, corchetes simples [] o corcchetes dobles [[]].
Ejemplo:
datos$deporte # Con $
## [1] TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
CONTENTS 23
## [1] TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
## [1] TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
Listas
Las listas son otro tipo de objeto muy usado para almacenar objetos de diferente tipo, aquí ya no importa la
dimensión. Para poder crear una lista en R, solo basta con usar list(), ejemplo:
lista
## $E1
## edad deporte comic_fav
## 1 25 TRUE <NA>
## 2 40 TRUE Superman
## 3 39 FALSE Batman
## 4 46 FALSE <NA>
## 5 10 TRUE Shazam
## 6 11 TRUE Batman
## 7 14 TRUE Superman
## 8 23 FALSE <NA>
## 9 43 FALSE GreenLanter
##
## $E2
## [,1] [,2] [,3]
## [1,] 1784 3918 3816
## [2,] 3918 9650 11218
## [3,] 3816 11218 15864
##
## $E3
## [1] 34 56 22
De igual forma, para extraer elementos se hace uso de los mismo operadores que con el data frame:
lista$E1 #Con $
## $E2
## [,1] [,2] [,3]
## [1,] 1784 3918 3816
## [2,] 3918 9650 11218
## [3,] 3816 11218 15864
## [1] 34 56 22
Importación y exportación de bases de
datos
En esta sección se mostrará cómo se pueden importar y exportar datos en el espacio de trabajo de R, mediante
algunas liberías tales como: foreing.
Es importante señalar que se pueden cargar datos de diferentes tipos de archivos o extensiones, pueden ser
varios, tales como: CSV; que es un tipo de datos separados por comas, o bien, también se pueden cargar datos
con el formato .DTA que refiere a un espacio de almacenamiento de Stata.
Además de las dos extensiones mencionadas, R permite realizar lecturas de extensiones .SAV pertenecientes a
una memoria de almacenamiento de datos de SPSS.
Y por último, tenemos un tipo de archivo que tiene la extensión de .DBF es el formato de datos utilizado original-
mente por el producto dBase, siendo en la actualidad el formato más comúnmente utilizado en DBMS (Sistema
de Gestión de Base de Datos), para computadoras personales.
Es importante tener en cuenta que hay muchas maneras de importar los datos en R, en las cuales RStudio también
juega un papel destacado, puesto a que con esta interfaz podemos cargar datos con el uso de la botonera en vez
de programar el código.
Para exportar datos, es necesario contar con un espacio o ruta definido, puesto a que se utilizarán funciones de
escritura donde se podrán almacenar los archivos exportados en diferentes formatos. Cabe recalcar que solo se
puede realizar mediante comando y no hay una función dentro de la botonera de RStudio que permita realizar
dicha acción.
Es por ello que a continuación se mostrarán las formas en las cuales podrás enrutar un espacio de trabajo (en
caso de no contar con un proyecto) o bien, se mostrará una forma sutíl en la cual se pueden cargar y exportar las
bases de una forma muy simple.
setwd()
La función setwd() permite enrutar un espacio de trabajo o una carpeta de donde se harán lectura de diversos
archivos que contenga este espacio, con ello podremos realizar carga de datos de una forma más útil.
Para realizar lo anterior es necesario conocer la ruta de la carpeta donde se contienen los archivos, en el caso
de Windows en muy sencillo podemos obtener dicha ruta, solo basta con dar click derecho y seleccionar “copiar
dirección”.
Posterior a ello, se utilizará el comando en R:
25
26 CONTENTS
Figure 28: *
Con lo anterior ya tendremos la facilidad de utilizar los comandos base de “[Link]()” y solo tendremos que
poner dentro del parentesis el nombre del archivo con la extensión .csv.
La otra manera de preparar todo, es mediante la creación de un proyecto, donde en este se contenga todas las
bases de datos a usar dentro de un análisis. Para esto se crea un proyecto nuevo, con una ruta y nombre en
especifico.
Posteriormente, se guardarán las bases dentro de la carpeta donde se encuentra el proyecto:
Una vez realizado lo anterior, cuando se este trabajando en RStudio, en la parte de “Files” se podrán visualizar
los archivos.
Y nuevamente para llamar a una base, solo se ocuparán los comandos pertenecientes al tipo de extensión que se
requieren.
Importación de datos
A continuación, se mostarán en diversos subtemas los tipos de archivo que se pueden cargar usando RStudio, así
mismo como el método de carga ya sea mediante un espacio previamente definido o con el uso de la botonera.
Comando [Link](“clipboard”)
Una manera muy sencilla de cargar una base de datos, es mediante el comando [Link](“clipboard”) con
este comando podemos (literalmente) copiar y pegar datos traidos de una hoja de excel, de una archivo de Stata
o SPSS.
Para realizar este paso, lo primero que se debe hacer es abrir el archivo de donde queremos sustraer los datos y
copiar todo lo que queremos ingresar a R (con todo y cabeceras):
Posteriormente de copiar los datos, se utiliza el comando:
CONTENTS 27
Figure 30: *
base<-[Link]("clipboard")
head(base)
## [1] Imagenes.
## <0 rows> (o 0- extensión [Link])
La desventaja de utilizar este tipo de comando es que en ocasiones (dependiendo del formato de los datos), tomará
los valores “pegados” como caracteres.
class(base$IM)
## [1] "NULL"
Figure 32: *
28 CONTENTS
Figure 34: *
class(base$GM)
## [1] "NULL"
Para cargar una base de datos con la extensión o formato CSV, se utiliza el comando [Link](“[Link]”) con
lo cual podremos cargar los datos de dicha base en esta extensión, sin embargo hay dos maneras de realizarla:
1) Generando el espacio de trabajo o enrutando y 2) Con el uso de la botonera.
Para cargar una base de esta manera, se debe realizar lo que previamente se realizó en este documento (ya sea
usando setwd() o un proyecto con lo archivos a cargar), entonces, lo único que se debe realizar es simplemente
asignarle un nombre a la base y cargar el archivo:
base1<-[Link]("Bases/Marginació[Link]",
[Link] = F)
head(base1[1:3])
Figure 36: *
class(base1)
## [1] "[Link]"
base2<-[Link]("Bases/[Link]")
head(base2[1:3])
class(base2)
## [1] "[Link]"
Uso de botonera
Otra manera de cargar la base, es mediante la botonera de RStudio. Para ello, tendremos que irnos la parte de
“import Dataset” y dar click en “From text”:
Figure 38: *
Posterior a ello, aparecera un menu, en el cual vamos a buscar la ruta del archivo:
Figure 40: *
Una vez seleccionado el archivo y al ejecutar, se desplegará una ventana como la siguiente:
Para cargar una base de datos con la extensión o formato DTA, se utiliza el comando read_dta(“[Link]”)
de la libería haven con lo cual podremos cargar los datos de dicha base en esta extensión, sin embargo hay dos
CONTENTS 31
Figure 42: *
Para cargar una base de esta manera, se debe realizar lo que previamente se realizó en este documento (ya sea
usando setwd() o un proyecto con lo archivos a cargar), entonces, lo único que se debe realizar es simplemente
asignarle un nombre a la base y cargar el archivo:
library(haven)
baseE<-read_dta("Bases/[Link]")
head(baseE[1:3])
## # A tibble: 6 x 3
## con1 edo muni
## <dbl> <dbl> <dbl>
## 1 1 2 2
## 2 2 2 2
## 3 3 2 2
## 4 4 2 2
## 5 5 2 2
## 6 6 2 2
class(baseE)
base2d<-read_dta("Bases/[Link]")
head(base2d[1:3])
## # A tibble: 6 x 3
## folioviv foliohog ubica_geo
## <chr> <chr> <chr>
## 1 0100013605 1 01001
32 CONTENTS
## 2 0100013606 1 01001
## 3 0100017801 1 01001
## 4 0100017802 1 01001
## 5 0100017803 1 01001
## 6 0100017804 1 01001
class(base2d)
Uso de botonera
Otra manera de cargar la base, es mediante la botonera de RStudio. Para ello, tendremos que irnos la parte de
“import Dataset” y dar click en “From Stata”:
Figure 44: *
Posterior a ello, aparecera un menu, en el cual vamos a buscar la ruta del archivo:
Figure 46: *
Una vez seleccionado el archivo y al ejecutar, se desplegará una ventana como la siguiente:
CONTENTS 33
Figure 48: *
Para cargar una base de datos con la extensión o formato DTA, se utiliza el comando read_sav(“[Link]”)
de la libería haven con lo cual podremos cargar los datos de dicha base en esta extensión, sin embargo hay dos
maneras de realizarla: 1) Generando el espacio de trabajo o enrutando y 2) Con el uso de la botonera.
Para cargar una base de esta manera, se debe realizar lo que previamente se realizó en este documento (ya sea
usando setwd() o un proyecto con lo archivos a cargar), entonces, lo único que se debe realizar es simplemente
asignarle un nombre a la base y cargar el archivo:
library(haven)
baseS<-read_sav("Bases/[Link]")
head(baseS[1:3])
## # A tibble: 6 x 3
## con1 edo muni
## <dbl> <dbl> <dbl>
## 1 1 2 2
## 2 2 2 2
## 3 3 2 2
## 4 4 2 2
## 5 5 2 2
## 6 6 2 2
class(baseS)
base2s<-read_sav("Bases/[Link]")
head(base2s[1:3])
## # A tibble: 6 x 3
## folioviv foliohog ubica_geo
## <chr> <chr> <chr+lbl>
## 1 0100013605 1 01001 [Ags., Aguascalientes]
## 2 0100013606 1 01001 [Ags., Aguascalientes]
## 3 0100017801 1 01001 [Ags., Aguascalientes]
## 4 0100017802 1 01001 [Ags., Aguascalientes]
## 5 0100017803 1 01001 [Ags., Aguascalientes]
## 6 0100017804 1 01001 [Ags., Aguascalientes]
class(base2s)
Uso de botonera
Otra manera de cargar la base, es mediante la botonera de RStudio. Para ello, tendremos que irnos la parte de
“import Dataset” y dar click en “From SPSS”:
Figure 50: *
Posterior a ello, aparecera un menu, en el cual vamos a buscar la ruta del archivo:
Una vez seleccionado el archivo y al ejecutar, se desplegará una ventana como la siguiente:
Para la lecutra de archivos en Excel (extensión .xlsx), se debe contar con dos paqueterias: readxl y openxlsx.
Además se debe trabajar con un espacio definido, es decir, ya debe existir un enrutamiento de una carpeta donde
se contengan los archivos con la extensión xlsx.
Librería readxl.
Para ejemplificar el uso de readxl, se tiene que utilizar el comando read_excel(“nombre-xlsx”) y posteriormente
cargará la base de datos en este formato:
CONTENTS 35
Figure 52: *
# [Link]("readxl",
# dependencies=TRUE)
library(readxl)
basexlsx<-read_excel("Bases/[Link]")
head(basexlsx[1:3])
## # A tibble: 6 x 3
## folioviv foliohog ubica_geo
## <dbl> <dbl> <dbl>
## 1 100013605 1 1001
## 2 100013606 1 1001
## 3 100017801 1 1001
## 4 100017802 1 1001
## 5 100017803 1 1001
## 6 100017804 1 1001
class(basexlsx)
Librería openxlsx.
Para ejemplificar el uso de openxlsx, se tiene que utilizar el comando read_excel(“nombre-xlsx”) y posterior-
mente cargará la base de datos en este formato:
# [Link]("readxl",
# dependencies=TRUE)
library(openxlsx)
36 CONTENTS
Figure 54: *
basexlsx2<-[Link]("Bases/Marginació[Link]")
head(basexlsx2[1:3])
class(basexlsx2)
## [1] "[Link]"
Para cargar una base en dicha extensión, no se puede usar la botonera, por lo que la definición de un espacio
es la unica manera, para ello se debe realizar lo que previamente se realizó en este documento (ya sea usando
setwd() o un proyecto con lo archivos a cargar), entonces, lo único que se debe realizar es simplemente asignarle
un nombre a la base y cargar el archivo:
library(foreign)
base3e<-[Link]("Bases/[Link]")
head(base3e[1:3])
CONTENTS 37
class(base3e)
## [1] "[Link]"
Exportación de datos
En este tema, se mostrarán las formas en como se pueden exportar bases de datos en formato [Link] solo
en las siguientes extensiones: .csv, .dta, .sav y RData. Para elaborar este proceso, se requiere definir un espacio
de trabajo, donde se almacenen las bases exportadas, para ello se recomienda elaborar una carpeta dentro del
proyecto, por lo que con R podemos realizarlo de una manera sencilla.
Para crear una carpeta, basta y sobra con usar [Link] y con la / se indica el nombre de dicha carpeta, tal y
como se mostrará a continuación:
[Link]("Bases/bases_exportadas")
Ahora, para cambiar el directorio a esa carpeta y ahí almacenar las bases importadas, se utilizará setwd enseguida
de paste0 junto con getwd para copiar la ruta actual del proyecto y al ultimo solo se anexa /bases_exportadas y
como resultado todo lo que se exporte se encontrará en dicha carpeta.
Supongamos que hay una a encuesta de20 personas, donde las preguntas se encuentran en una escala likert
(datos de 1 a 5), la información de alamacena como vectores y al final se elabora un [Link] de dichos datos:
ID<-c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
Nombre<-c("Juan", "Carlos", "Susana", "Javier", "Valeria",
"Alexis", "Alfredo", "Erandy", "Melissa","Jose",
"Diana", "Alin", "Andrea", "Luis", "Raymundo",
"Samuel","Armando", "Magdalena", "Joselin", "Ray")
Pregunta1<-c(1,4,5,2,3,1,1,2,4,5,3,1,2,5,3,1,5,3,5,3)
Pregunta2<-c(4,4,5,2,3,1,2,5,2,3,1,4,2,5,3,1,2,5,4,3)
Pregunta3<-c(2,3,5,1,4,2,2,1,3,5,5,3,1,4,2,2,4,5,3,1)
Encuesta
## 6 6 Alexis 1 1 2
## 7 7 Alfredo 1 2 2
## 8 8 Erandy 2 5 1
## 9 9 Melissa 4 2 3
## 10 10 Jose 5 3 5
## 11 11 Diana 3 1 5
## 12 12 Alin 1 4 3
## 13 13 Andrea 2 2 1
## 14 14 Luis 5 5 4
## 15 15 Raymundo 3 3 2
## 16 16 Samuel 1 1 2
## 17 17 Armando 5 2 4
## 18 18 Magdalena 3 5 5
## 19 19 Joselin 5 4 3
## 20 20 Ray 3 3 1
Para elaborar dicha salida, se requiere un [Link] ó marco de datos, ya sea de alguno que se haya manipulado
previamente o bien, el vacio manual de datos y almacenados en dicho formato.
Una vez contado con lo anterior, se procede a exportar en csv con la función [Link], la cual solicita el nombre
del [Link] que se desea exportar y file para la salida con el nombre deseado del formato .csv, a continuación
se muestra dicho proceso.
[Link](
Encuesta,
file="D:/GEM/Materiales extra/Introducción a R/Bases/bases_exportadas/[Link]"
)
Para elaborar dicha salida, se requiere un [Link] ó marco de datos, ya sea de alguno que se haya manipulado
previamente o bien, el vacio manual de datos y almacenados en dicho formato.
Una vez contado con lo anterior, se procede a exportar en .DTA con la función write_dta de la libreria haven, la
cual solicita el nombre del [Link] que se desea exportar y la ruta para la salida con el nombre deseado del
formato .dta, a continuación se muestra dicho proceso.
library(haven)
write_dta(Encuesta,
"D:/GEM/Materiales extra/Introducción a R/Bases/bases_exportadas/[Link]")
Para elaborar dicha salida, se requiere un [Link] ó marco de datos, ya sea de alguno que se haya manipulado
previamente o bien, el vacio manual de datos y almacenados en dicho formato.
Una vez contado con lo anterior, se procede a exportar en .DTA con la función write_sav de la libreria haven, la
cual solicita el nombre del [Link] que se desea exportar y la ruta para la salida con el nombre deseado del
formato .sav, a continuación se muestra dicho proceso.
CONTENTS 39
library(haven)
write_sav(Encuesta,
"D:/GEM/Materiales extra/Introducción a R/Bases/bases_exportadas/[Link]")
Para elaborar dicha salida, se requiere un [Link] ó marco de datos, ya sea de alguno que se haya manipulado
previamente o bien, el vacio manual de datos y almacenados en dicho formato.
Una vez contado con lo anterior, se procede a exportar en .DTA con la función save de la libreria base, la cual
solicita el nombre del [Link] que se desea exportar y la ruta para la salida con el nombre deseado del formato
.RData, a continuación se muestra dicho proceso.
save(Encuesta,
file="D:/GEM/Materiales extra/Introducción a R/Bases/bases_exportadas/[Link]")
40 CONTENTS
Fusión de bases
Para comenzar a realizar mapas, es importante contar con los datos necesarios para poder graficar cartografías
interactivas, es decir, se debe contar con la unión de una base datos a los elementos que componene la cartografía.
Sin embargo, para que esto sea posible es necesario entender en qué consiste la fusión de datos.
El concepto de fusión hace referencia a la unión de dos o más elementos en un solo, entonces, partiendo de este
concepto se debe tener claro que la fusión de bases consolidará una sola base que contenga toda la información
que se esta enlazando.
En R, existen diferentes formas de elaborar estas fusiones mediante el uso de las librerías base y dplyr, por lo
que a continuación se explicarán las maneras de elaborar este proceso teniendo en cuenta que existen varios
tipos de fusión.
Antes de comenzar con los tipos de unión, se trabajará un caso hipotetico creando dos data frame (marco de
datos) elaborados con R.
library(tidyverse)
Trabajador_id<-1:20
Nombre_trab<-c("Alexis", "Susana",
"Alfredo", "Diana",
"Marco", "Jaime",
"Alexa","Kate",
"Jose", "Jess",
"Carlos", "Karina",
"Dian", "Evelyn",
"Joss", "Bryan",
"Cesar", "Monica",
"Fernanda", "María")
data1<-[Link](Clave=Trabajador_id[1:15],
Nombre=Nombre_trab[1:15],
Salario=Salario_trab[1:15])
data2<-[Link](Clave=Trabajador_id[-7],
Nombre=Nombre_trab[-7],
Edad=Edad_trab[-7],
Puesto=Puesto_trab[-7])
41
42 CONTENTS
Table 1: Base 1
Table 2: Base 2
La intersección o inner join, es la unión de conjuntos de datos más habitual que se realiza e la fusión de datos.
El proceso consiste en unir dos bases de datos (en formato data frame o marco de datos) que contengan los
elementos comunes de ambos, a continuación se muestra un ejemplo visual:
Usando merge
Para realizar esta fusión, se puede utilizar el comando merge de la librería base, solo se debe declarar las bases
como x e y además del argumento by y se seleccionan las columnas enlace donde se realiza la intersección de
los datos. A continuación se muestra el ejemplo:
Base_inner<-merge(x=data1,
y=data2,
by=c("Clave", "Nombre"))
Usando dplyr
Con la librería de dplyr se puede realizar fusiones de bases de datos, para el caso de inner join se debe utilizar
la función que tiene por porpio nombre este tipo de fusión, el argumento se basa en colocar las bases según la
posición que se desea tomar y después con el operador by se indica la columna llave para unir las bases. A
continuación se muestra un ejemplo:
Dplyr_inner<-data1%>%
inner_join(data2, by=c("Clave", "Nombre"))
44 CONTENTS
Consiste en la unión completa, puesto a que combina todas las colunas de ambas bases o conjuntos de datos en
un solo marco de datos. En esta unión se incluyen todos los elementos.
Usando merge
Para realizar dicha unión de bases con el comando merge basta con agregar la instrucción all=TRUE para que
una en su totalidad las bases.
Base_full<-merge(x=data1,
y=data2,
all=TRUE)
Usando dplyr
Para realizar la fusión con dplyr es necesario usar la instrucción full_join y solo agregar la base a fusionar, tal
como se muestra en el siguiente ejemplo:
Dplyr_full<-data1%>%
full_join(data2)
La unión a la izquierda consiste en unir todas las filas del primer merco de datos con los valores correspondientes
del segundo, es decir, que solo se busca unir con los elementos equivalentes de X con respecto a Y, tal y como
se muestra en la siguiente imagen.
46 CONTENTS
Usando merge
Con la librería base y la función merge se puede elaborar la unión a la izquierda, argumentando las bases en X e
Y, solo se agrega la instrucción de all.x para indicar que la fusión será a la izquierda:
Base_left<-merge(x=data1,
y=data2,
all.x = TRUE)
Usando dplyr
Para realizar el tipo de unión o fusión a la izquierda con dplyr, solo basta con utilizar la función left_join y dentro
de la función se pone la base Y, tal y como se muestra a continuación:
48 CONTENTS
Dplyr_left<-data1 %>%
left_join(data2)
Es lo opuesto al left join pues en este caso, la combinación consiste en unir todas las filas del segundo marco de
datos con las correspondientes del primero, es decir, que solo se busca unir con los elementos equivalentes de Y
con respecto a X, tal y como se muestra en la siguiente imagen.
Usando merge
Con la librería base y la función merge se puede elaborar la unión a la izquierda, argumentando las bases en Y y
X, solo se agrega la instrucción de all.y para indicar que la fusión será a la derecha:
Base_right<-merge(x=data1,
y=data2,
all.y = TRUE)
Usando dplyr
Para realizar el tipo de unión o fusión a la izquierda con dplyr, solo basta con utilizar la función right_join y dentro
de la función se pone la base Y, tal y como se muestra a continuación:
Dplyr_right<-data1 %>%
right_join(data2)
50 CONTENTS
Un shapefile es un formato sencillo y no topológico que se utiliza para almacenar la ubicación geométrica y la
información de atributos de las entidades geográficas. Las entidades geográficas de un shapefile se pueden
representar por medio de puntos, líneas o polígonos (áreas). El espacio de trabajo que contiene los shapefiles
también pueden incluir tablas del dBASE, que pueden almacenar atributos adicionales que se pueden vincular a
las entidades de un shapefile. (ARCGIS, 2016)
Con base a la definción que proporciona ARCGIS, se puede concluir que un archivo shapefile (.shp) contiene la in-
formación geográfica (no topológica) de una entidad y que esta puede presentar atributos que pueden relacionarse
con archivos .csv, .txt o .tab.
En R, para poder importar un shapefile (.shp), se puede hacer mediante dos librerías, las cuales son: rgdal y sf,
posteriormente se cargan las instrucciones de readOGR y read_sf, a continuación se muestra un ejemplo con el
mapa de los Estados Unidos Mexicanos por entidades:
library(easypackages)
librerias<-c("sf")
libraries(librerias)
mapa_mex2<-st_read("Mapas/México_Estados.shp")
Gráficando cartografía
Para elaborar el ploteo o gráfico de la cartografía, se puede hacer mediante un plot de la librería base, con el uso
de ggplot y la geometría de sf y con leaflet pero este último no visuliza como imagen, solo se puede apreciar en
Viewer por lo que se debe consultar en RStudio. A continuación se mostrarán unos ejemplos.
51
52 CONTENTS
• Mediante plot: Solo se necesita utilizar plot seguido del nombre de la cartografía, en caso de usar el objeto
importado con rgdal. Para el mapa con el shapefile importado con sf se debe especificar geometry, ya que
de no ser así hará dos mapas según los elementos de los datos que contiene toda la cartografía.
plot(mapa_mex2$geometry)
• Mediante ggplot2: Para el caso de ggplot2 solo se puede utilizar la cartografía importada mediante la pa-
quetería sf y usando la capa de geometría geom_sf, por lo que se podrá visualizar el trazo de la siguiente
manera.
mapa_mex2 %>%
ggplot()+
geom_sf()
CONTENTS 53
30°N
25°N
20°N
15°N
• Mediante leaflet: Es una mapa interactivo con mucha presencia, la desventaja es que solo se puede visualizar
en la pestaña de Viewer dentro de RStudio, por lo que no se puede visualizar como imagen. Para elaborar
este mapa, se requiere seguir las siguientes instrucciones y ocupando la catografía importada mediante
rgdal.
# library(leaflet)
# pal<-colorNumeric(palette = "YlGnBu",
# domain = mapa_mex1$AREA)
# leaflet(mapa_mex1) %>%
# addProviderTiles("[Link]") %>%
# addPolygons(color = ~pal(mapa_mex1$AREA),
# stroke = FALSE, fillOpacity = 0.6)
• Contar con una base de datos con la que se pueda enlazar o unir mediante merge o dplyr.
• Tener conocimientos de fusiones.
• Mapejar correctamente ggplot y plot
Para estos mapas tematicos, se utilizará la encuesta de ingresos y gastos en los hogares del 2020 que realiza el
INEGI, con la finalidad de realizar mapas temáticos de indices económicos de México.
54 CONTENTS
A continuación se muestra la construcción de un data frame que contiene el nivel de ingreso promedio por entidad
federativa:
• Se seleccionan variables de interés y se transforma el folioviv en formato númerico mediante una previa
transformación en formato caracteres.
library(foreign)
enigh<-[Link]("Bases/[Link]")
base<-enigh %>%
select(folioviv, foliohog, ubica_geo, factor,
sexo_jefe, educa_jefe, edad_jefe, hombres,
mujeres, ing_cor, ingtrab,trabajo,
negocio, otros_trab,rentas,utilidad,
arrenda, transfer, jubilacion, becas,
donativos, remesas, bene_gob,transf_hog,
transf_hog, estim_alqu, otros_ing, upm,
est_dis, trans_inst)
base$folioviv<-[Link](base$folioviv)
base$folioviv<-[Link](base$folioviv)
• Posteriormente se substraen las primeras dos posiciones de los elementos de folioviv para obtener la clave
de entidad, después se utiliza case_when para poder atribuirle un nombre de estado según la clave de
entidad.
base<-base %>%
mutate(clave_ent= case_when(nchar(folioviv)==9 ~ substr(folioviv,
1,1),
TRUE ~substr(folioviv,1,2)))
## Nombrando folio/entidad
clave_ent==21 ~ "Puebla",
clave_ent==22 ~ "Querétaro",
clave_ent==23 ~ "Quintana Roo",
clave_ent==24 ~ "San Luis Potosí",
clave_ent==25 ~ "Sinaloa",
clave_ent==26 ~ "Sonora",
clave_ent==27 ~ "Tabasco",
clave_ent==28 ~ "Tamaulipas",
clave_ent==29 ~ "Tlaxcala",
clave_ent==30 ~ "Veracruz",
clave_ent==31 ~ "Yucatán",
clave_ent==32 ~ "Zacatecas"))
• Se calcula el ingreso promedio por estado, utilizando un agrupamiento con group_by y se utiliza el nombre
de las entidades, posterior se utiliza summarise y dentro de este se coloca el calculo de la media incluyendo
el factor de expansión (para entender qué es un factor de expansión se recomienda leer la metodología de
la ENIGH 2020).
names(Ingreso_estado)=c("Entidad", "Ingreso_promedio")
kable(Ingreso_estado,
caption = "Ingreso promedio trimestral estatal")
En este paso, se realiza uniones mediante left join en donde la variable X es mapa_mex2 que contiene todos los
datos del mapa y la variable Y es Ingreso_estado que es el calculo del ingreso promedio trimestral para cada
estado. A continuación se muestra la unión:
mex_map_ing<-mapa_mex2 %>%
left_join(Ingreso_estado,
by=c("ESTADO"="Entidad"))
Posterior a ello, se puede realizar el utilizando la librería base y plot, pero dentro de la base a usar, se debe usar
el nombre de la fusión de cartografía y base junto con [] donde se escribe el nombre de la columna temática (en
este caso Ingreso_promedio).
A continuación se muestra un ejemplo:
plot(mex_map_ing[,"Ingreso_promedio"],
breaks="jenks",
main="Nivel de ingresos por entidad")
56 CONTENTS
Entidad Ingreso_promedio
Aguascalientes 58303.33
Baja California 67820.56
Baja California Sur 64265.86
Campeche 47275.79
Chiapas 29167.59
Chihuahua 60263.33
Coahuila 55670.65
Colima 56297.28
Distrito Federal 67356.70
Durango 50361.29
Guanajuato 48387.71
Guerrero 32515.69
Hidalgo 40090.31
Jalisco 55746.31
Michoacán 46410.41
Morelos 42041.24
México 49620.10
Nayarit 51964.79
Nuevo León 72930.71
Oaxaca 36263.22
Puebla 39616.45
Querétaro 60435.02
Quintana Roo 46379.61
San Luis Potosí 47819.39
Sinaloa 55834.40
Sonora 61358.11
Tabasco 41665.47
Tamaulipas 49688.16
Tlaxcala 37918.64
Veracruz 35126.25
Yucatán 46765.71
Zacatecas 44405.22
CONTENTS 57
70000
50000
30000
La librería base, automáticamente asignará un color o una escala de colores según la temática, entonces, para
poder mejorar la paleta se utiizará nbreaks para poder indicar que son 32 datos diferentes y con pal argumentando
con [Link](32) se la da la instrucción que ocupe una escala de iluminado para los 32 datos (que en este caso
son las entidades), el gráfico queda de la siguiente manera:
plot(mex_map_ing[,"Ingreso_promedio"],
breaks="jenks",
nbreaks=32,
pal=[Link](32),
main="Nivel de ingresos por entidad")
58 CONTENTS
70000
50000
30000
Graficando mapa interactivo con ggplot2
Para elaborar el mapa temático mediante ggplot2, se requiere contar con la base unida entre la catografía y los
datos manipulados. Posteriormente al utilizar ggplot y la geometría geom_sf se escribe dentro del trazo el argu-
mento de aes y en este se da la instrucción de fill=Nombre de la variable que en este caso es ingreso_promedio.
A continuación se muestra un ejemplo:
mex_map_ing %>%
ggplot()+
geom_sf(aes(fill=Ingreso_promedio))
CONTENTS 59
30°N
Ingreso_promedio
70000
25°N
60000
50000
40000
20°N
30000
15°N
Insertando títulos
Ahora, si se desea declarar un título, subtítulo y pie de gráfico se puede realizar mediante la capa de labs donde
se tienen funciones como title, subtitle y caption que permiten agregar dichos textos al gráfico. Además de ello,
se puede manipular el color de las lineas divisoras para cada entidad o estado, aplicando color, linetype y lwd qie
permitirán manipular dicho trazo. A continuación se muestra un ejemplo:
mex_map_ing %>%
ggplot()+
geom_sf(aes(fill=Ingreso_promedio),
color="white",
linetype=1,
lwd=0.25)+
labs(title="Ingreso promedio trimestral",
subtitle="Mapa a nivel Estatal",
caption="Elaboración propia con datos de la ENIGH 2020")
60 CONTENTS
30°N
Ingreso_promedio
70000
25°N
60000
50000
40000
20°N
30000
15°N
Si se busca cambiar el coloreo que por predeterminado asigna geom_sf, se necesita hacer una serie de config-
uraciones para poder lograr dicho objetivo. Para el siguiente ejemplo, se manipula scale_fill_viridis_c la cual es
una paleta de colores donde en option se puede asignar diferentes paletas según la letra, las cuales son:
• A: Magma.
• B: Inferno.
• C: Plasma.
• D: Viridis.
• E: Cividis.
mex_map_ing %>%
ggplot()+
geom_sf(aes(fill=Ingreso_promedio),
color=NA)+
scale_fill_viridis_c(option="D")+
labs(title="Ingreso promedio trimestral",
subtitle="Mapa a nivel Estatal",
caption="Elaboración propia con datos de la ENIGH 2020")
CONTENTS 61
30°N
Ingreso_promedio
70000
25°N
60000
50000
40000
20°N
30000
15°N
Para poder elaborar un mapa con mucho mayor detalle, se deben realizar una serie de pasos un poco largos. Estas
etapas consisten en ir generando pequeñas escalas dentro de la variable temática, para que se pueda elaborar
coloreos mediante intervalos.
Entonces como una primera etapa se va a genera un objeto en el que se contenga saltos de escala correspon-
dientes al vector temático. En este caso como se tienen promedios trimestales y las cifras estan en miles, las
escalas tendrán que ser iguales a los datos. Posteriormente, se crea una nueva variable dentro de la unión de la
cartografía y lo datos temáticos. A continuación se muestra el ejemplo:
br<-c(20,25,30,35,40,45,
50,55,60,65,75,80)*1000
mex_map_ing<-mex_map_ing %>%
mutate(ingreso_prom=cut(Ingreso_promedio,
breaks = br,
[Link]=5))
mex_map_ing
Posteriormente se creará un objeto que tiene por nombre labs y label_plot el cual corresponderá a las etiquetas
que irán en la leyenda del mapa, a continuación se muestra el ejemplo:
labs<-c(20,25,30,35,40,45
,50,55,60,65,75,80)
label_plot<-paste0("(",labs[1:11],
"k-", labs[2:12],"k]")
Ahora, una vez generadas las etiquetas de la leyenda, se procede a realizar una peleta de colores, la cual se genera
mediante [Link]() dentro del argumento va el número de escalas (n=12), el tipo de paleta (en el ejemplo se
utilizará “Berlin”), rev como verdadero y un grado de transparencia del 30% (alpha=0.7).
A continuación se muestra el ejemplo:
paleta<-[Link](12, "Berlin",
rev=TRUE, alpha=0.7)
Se procede a realizar el mapa con la elaboración de los intervalos, por lo que en fill debe ir el nombre de la variable
que contienen los limites, en este caso será ingreso_prom. Después, se utiliza dentro de labs la instrucción de fill
para asignar el nombre a la leyenda.
Lo complicado esta dentro de scale_fill_manual pues se realizan varias instrucciones, dentro de las cuales value
es igual al nombre asignado a la paleta creada para que colore el mapa segun los colores especificados. Después
se indica que el drop debe ser falso, si hay valores na se pide mediante [Link] que sean de color gris. Para
la parte de las etiquetas de la leyenda, se utiliza la instrucción label y se asigna el valor correspondiente de
label_plot.
Ahora, para manipular la leyenda se utiliza la instrucción de guide dentro de scale_fill_manual y en ella se
arguementa la posición con direction, nrow para el número de filas de la leyenda (que será 2) y la posición de la
leyenda dentro del gráfico la cual se ordena mediante [Link].
Por útlimo, se agrega el tema de ggplot (theme_void) para eliminar la maya o el grid y con theme se argumenta
el tamaño de letra y estilo del pie de gráfico con [Link].
A continuación se muestra el resultado de toda esta manipulación:
CONTENTS 63
mex_map_ing %>%
ggplot()+
geom_sf(aes(fill=ingreso_prom),
color="white")+
labs(title="Ingreso promedio trimestral",
subtitle="Mapa a nivel Estatal",
caption="Elaboración propia con datos de la ENIGH 2020",
fill= "MXN")+
scale_fill_manual(values = paleta,
drop=FALSE,
[Link] = "grey80",
label=label_plot,
guide=guide_legend(direction = "horizontal",
nrow=2,
[Link] = "bottom"))+
theme_void()+
theme([Link] = element_text(size=10, face="italic"),
[Link] = "bottom")
En este ejemplo se realizará el mapa temático del producto interno bruto por entidad federativa según las estima-
ciones del INEGI para el año 2020. En el archivo PIB_entidad_2020 se encuentran los datos dentro de la hoja
2020, como es un archivo .xlsx se requiere de readxl para poder dar lectura a los datos.
64 CONTENTS
library(readxl)
PIB_entidad<-read_excel("Bases/PIB_entidad_2020.xlsx",
sheet = "2020")
Posteriormente de la importación, se procede a manipular la clave de entidad mediante case_when y las her-
ramientas de dplyr para asignar los nombres de las entidades iguales a las del archivo .shp. Además se crea una
variable que tiene por nombre PIB_mm donde se hace una conversión a escala de milies de millones de pesos.
PIB_entidad<-PIB_entidad %>%
mutate(Entidad=case_when(Clave_ent==1 ~ "Aguascalientes",
Clave_ent==2 ~ "Baja California",
Clave_ent==3 ~ "Baja California Sur",
Clave_ent==4 ~ "Campeche",
Clave_ent==5 ~ "Coahuila",
Clave_ent==6 ~ "Colima",
Clave_ent==7 ~ "Chiapas",
Clave_ent==8 ~ "Chihuahua",
Clave_ent==9 ~ "Distrito Federal",
Clave_ent==10 ~ "Durango",
Clave_ent==11 ~ "Guanajuato",
Clave_ent==12 ~ "Guerrero",
Clave_ent==13 ~ "Hidalgo",
Clave_ent==14 ~ "Jalisco",
Clave_ent==15 ~ "México",
Clave_ent==16 ~ "Michoacán",
Clave_ent==17 ~ "Morelos",
Clave_ent==18 ~ "Nayarit",
Clave_ent==19 ~ "Nuevo León",
Clave_ent==20 ~ "Oaxaca",
Clave_ent==21 ~ "Puebla",
Clave_ent==22 ~ "Querétaro",
Clave_ent==23 ~ "Quintana Roo",
Clave_ent==24 ~ "San Luis Potosí",
Clave_ent==25 ~ "Sinaloa",
Clave_ent==26 ~ "Sonora",
Clave_ent==27 ~ "Tabasco",
Clave_ent==28 ~ "Tamaulipas",
Clave_ent==29 ~ "Tlaxcala",
Clave_ent==30 ~ "Veracruz",
Clave_ent==31 ~ "Yucatán",
Clave_ent==32 ~ "Zacatecas"),
PIB_mm=PIB/1000)
Despúes, se procede a unir las bases de datos con la catografía para poder realizar el mapa temático.
mex_map_PIB_ent<-mapa_mex2 %>%
left_join(PIB_entidad,
by=c("ESTADO"="Entidad"))
Una vez elaborado lo anterior, se procede a realizar un primer gráfico sencillo con la finalidad de corroborar que
la fusión se hizo correctamente.
CONTENTS 65
options(scipen = 999)
mex_map_PIB_ent %>%
ggplot()+
geom_sf(aes(fill=PIB_mm),
color=NA)+
scale_fill_viridis_c(option="D")+
labs(title="Producto Interno Bruto 2020",
subtitle="Mapa a nivel Estatal",
caption="Elaboración propia con datos de la ENIGH 2020")
30°N
PIB_mm
25°N
2000
1000
20°N
15°N
Una vez comprobado que la fusión fue correcta, se procede a manipular los intervalos para la elaboración de un
mapa mucho más trabajado, tal y como se mostro en manipulación avanzada.
br1<-c(0,25,50,75,100,125,150,
175,200,225,250,300)*10
mex_map_PIB_ent<-mex_map_PIB_ent %>%
mutate(pib_int=cut(PIB_mm,
breaks = br1,
[Link]=5))
mex_map_PIB_ent
## First 10 features:
## CODIGO ESTADO Clave_ent PIB PIB_mm
## 1 MX02 Baja California 2 553945.1 553.9451
## 2 MX03 Baja California Sur 3 121577.9 121.5779
## 3 MX18 Nayarit 18 107297.2 107.2972
## 4 MX14 Jalisco 14 1125369.6 1125.3696
## 5 MX01 Aguascalientes 1 204142.6 204.1426
## 6 MX11 Guanajuato 11 652735.7 652.7357
## 7 MX22 Querétaro 22 366872.3 366.8723
## 8 MX13 Hidalgo 13 242824.9 242.8249
## 9 MX16 Michoacán 16 395562.1 395.5621
## 10 MX15 México 15 1487907.5 1487.9075
## geometry pib_int
## 1 MULTIPOLYGON (((-113.1397 2... (500,750]
## 2 MULTIPOLYGON (((-111.2061 2... (0,250]
## 3 MULTIPOLYGON (((-106.6211 2... (0,250]
## 4 MULTIPOLYGON (((-101.5249 2... (1000,1250]
## 5 MULTIPOLYGON (((-101.8462 2... (0,250]
## 6 MULTIPOLYGON (((-100.2803 2... (500,750]
## 7 MULTIPOLYGON (((-100.1228 1... (250,500]
## 8 MULTIPOLYGON (((-98.65941 1... (0,250]
## 9 MULTIPOLYGON (((-103.4796 1... (250,500]
## 10 MULTIPOLYGON (((-98.62798 1... (1250,1500]
Una vez creados los intervalos, se creará los labels que se utilizarán para las leyendas y agrupamientos.
labs1<-c(0,25,50,75,100,125,150,
175,200,225,250,300)*10
label_plot1<-paste0("[",labs1[1:11],
"-", labs1[2:12],"]")
Continuando, se manipulará la paleta de colores a 12 intervalos con los colores que porporciona Inferno pero
utilizandolos nomrmalmente y no invertidos (rev=FALSE).
paleta1<-[Link](12, "Inferno",
rev=FALSE, alpha=0.7)
Por último, se procede a realizar el mapa avanzado modificando el tamaño y tipo de letra que tendrá el título,
además de modificar la leyenda con el fin de que el cuadro ilustrativo no quede muy grande.
mex_map_PIB_ent %>%
ggplot()+
geom_sf(aes(fill=pib_int),
color="white")+
labs(title="Producto Interno Bruto por entidad",
subtitle="Miles de millones de pesos constantes a 2013",
caption="Elaboración propia con datos de INEGI",
fill= "MMDP")+
scale_fill_manual(values = paleta1,
drop=FALSE,
[Link] = "grey80",
label=label_plot1,
guide=guide_legend(direction = "horizontal",
nrow=2,
CONTENTS 67
[Link] = "left"))+
theme_void()+
theme([Link] = element_text(size=10, face="italic",
hjust=1),
[Link] = element_text(size=18, face="bold",
hjust = 0.5),
[Link] = element_text(hjust=0.5),
[Link] = "bottom")