Al comenzar a trabajar con R y RStudio se debe preparar el “ambiente de trabajo”, que supone implementar algunos comandos previamente sobre distintos aspectos: i. idioma del ambiente, ii. directorio de trabajo, iii. librerías de apoyo.
Sys.setlocale("LC_ALL", "Spanish")
## Warning in Sys.setlocale("LC_ALL", "Spanish"): OS reports request to set locale
## to "Spanish" cannot be honored
## [1] ""
Sys.setlocale("LC_ALL", "es_MX")
## Warning in Sys.setlocale("LC_ALL", "es_MX"): OS reports request to set locale
## to "es_MX" cannot be honored
## [1] ""
el primero consiste en instalar las paqueterías en caso de que no se encuentren referidas en el listado de los paquetes (se encuentra en la pestaña denominada “packages”, en la parte superior de la ventana de los “files, plots, packages, help, viewer”) y,
el segundo se centra en activar una librería previamente instalada.
La instalación de las paqueterías se realiza por defecto cuando
se va a utilizar por primera vez ésta dentro del ambiente de trabajo de
R y R Studio, y ello supone que no se encuentra referida en el listado
de las librerías o paquetes de R Studio. Para instalar una librería se
utiliza el script install.packages()
, y dentro de los
paréntesis se escribe el nombre entrecomillado de la
librería; en este caso se instalarán las librerías “tidyverse” y
“easypackages”:
install.packages("easypackages")
install.packages("tidyverse")
Si R no arroja ningún mensaje de error - en letras de color rojo- al final del proceso y si, además, ahora aparece el nombre de la librería en el listado de paquetes, esto refiere que la paquetería se ha instalado correctamente. Sin embargo aún no está activada.
library()
, y dentro del paréntesis se escribe el nombre de
la librería sin entrecomillar.library(easypackages)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Si al final del proceso, en la consola no se observa ningún mensaje de error (en letras de color rojo), entonces se considera que la librería se ha activado y, en consecuencia, aparecerá marcada la casilla de verificación a un costado izquierdo del nombre de la librería en el listado de paquetes.
Pero en el caso de querer instalar y activar diversas librerías
simultáneamente, se puede hacer uso de una librería alternativa
denominada easypackages()
, que se activó previamente:
Posteriormente se crea un objeto con el nombre de las librerías a cargar, para lo que utilizaremos los siguientes: haven que permite abrir data frames con diversos formatos, tidyverse de la que utilizaremos la librería dplyr para manipular filas y columnas de un data frame y openslxs para abrir data frames en formato “.xlsx”.
paquetes <- c("haven","tidyverse", "dplyr", "openxlsx") #objeto con el nombre de las librerías
Después se activan dichas librerías mediante el script
libraries()
, que es parte de “easypackages”:
libraries(paquetes)
## Loading required package: haven
## Loading required package: openxlsx
## All packages loaded successfully
Para identificar si las librerías se encuentran activas, se pueden observar la casillas marcadas en el listado de las librerías instaladas dentro de la pestaña de “Packages”.
Distintas bases o matrices de datos previamente creadas suelen guardarse en diversos formatos, derivados de los programas en que fueron elaboradas.
Algunos de los formatos más comunes en que se encuentran estas matrices de datos o Data Frames (DF) suelen ser aquellos cuya terminación es “nombre.csv” (comma separated values) o a manera de tablas texto (.txt) en formato procesador de texto. Para abrir algún archivo DF de estos tipos en R, R Studio cuenta con opciones base que se pueden crear como “objetos”, y además se mostrarán en el “ambiente” de R Studio. Antes de importarlos, estOs DF se deben encontrar ubicados en el directorio de trabajo pre definido.
El comando (o script) read.csv()
se utiliza para abrir
los DF guardados en formato “.csv”. Y dicho comando requiere, al menos,
de dos argumentos: i. la ruta de acceso al archivo y, ii. “header” con
valores de TRUE o FALSE, para indicar si la primer fila del archivo
contiene los nombres de las variables.
datos_covid <- read.csv("/Users/gustavo/Dropbox/R/200613COVID19MEXICO.csv", header = TRUE) #ruta de acceso a los datos, 'header = TRUE' en caso de que el archivo cuente con nombres de las variables.
En el caso de archivos que contienen información de un DF que fueron
guardados en formato de texto (“nombre.txt”), se pueden importar a R a
través del comando read.table()
, que se integra por otros
argumentos adicionales: i. ruta de acceso al archivo, ii. header, con
valores TRUE o FALSE, iii. sep =, que se refiere al caracter que sirve
para separar los datos, y iv. dec = “.”, que señala el caracter que
sirve para identificar los valores decimales.
data2 <- read.table("/Users/gustavo/Dropbox/R/datos_computos_distritos_diputado.txt", header = TRUE, sep = "|", dec = ".")
También existen otros formatos en que se suelen guardar los DF, los que se pueden abrir desde R y R Studio para lo que se requiere el uso de librerías adicionales. En el caso de archivos con formato “nombre.xlsx” o excel, existen las siguientes alternativas:
read_xlsx()
, con los
argumentos: i. sheet = 1, y ii. col_names, con valores TRUE o
FALSE.library(readxl) #solo permite leer archivo xls pero no sobreescribirlos
data3 <- read_xlsx("/Users/gustavo/Dropbox/R/Base_datos_Informe_Pais.xlsx", sheet = 1, col_names = TRUE)
openxlsx()
, usando el comando
read.xlsx()
. Este comando requiere los argumentos: i. sheet
= 1, ii. startRow = 1, iii. colNames =, con valores TRUE o FALSE,
rowNames =, con valores TRUE o FALSE:library(openxlsx) #carga de librería
data4 <- openxlsx::read.xlsx("/Users/gustavo/Dropbox/R/Base_datos_Informe_Pais.xlsx", sheet = 1, startRow = 1, colNames = TRUE, rowNames = FALSE) #apertura del archivo
Otro de los formatos comunes en que se suelen archivar los DF suelen
ser aquellos correspondientes a los programas de análisis estadístico
STATA (.dta) y SPSS (.sav). Para ello se utiliza la librería
haven()
, previamente instalada. Con esta librería, la
importanción de datos a R respetará los caracteres especiales de la
información así como la construcción de variables especiales.
En el caso de los data frame construidos desde el programa STATA, cuya terminación es “.dta”, se pueden importar los datos de la siguiente manera:
data5 <- read_dta("/Users/gustavo/Dropbox/R/Latinobarometro_2018_Esp_Stata_v20190303.dta")
Para los casos de los archivos que fueron construidos desde el programa SPSS y cuya terminación es “.sav”, existe la siguiente opción para su apertura:
data6 <- read_sav("/Users/gustavo/Dropbox/R/Latinobarometro_2018_Esp_Spss_v20190303.sav")
Una vez que se cuenta con un data frame abierto en el ambiente de R Studio, es pertinente identificar el tipo o clase de objeto de la que se trata.
class(datos_covid)
## [1] "data.frame"
Además es importante identificar el tamaño del data frame, mediante las dimensiones del mismo. Esto se presenta como: i. número de filas, ii. número de columnas.
dim(datos_covid)
## [1] 401755 35
También es muy importante identificar el nombre de las variables o columnas que integran al data frame.
names(datos_covid)
## [1] "FECHA_ACTUALIZACION" "ID_REGISTRO" "ORIGEN"
## [4] "SECTOR" "ENTIDAD_UM" "SEXO"
## [7] "ENTIDAD_NAC" "ENTIDAD_RES" "MUNICIPIO_RES"
## [10] "TIPO_PACIENTE" "FECHA_INGRESO" "FECHA_SINTOMAS"
## [13] "FECHA_DEF" "INTUBADO" "NEUMONIA"
## [16] "EDAD" "NACIONALIDAD" "EMBARAZO"
## [19] "HABLA_LENGUA_INDIG" "DIABETES" "EPOC"
## [22] "ASMA" "INMUSUPR" "HIPERTENSION"
## [25] "OTRA_COM" "CARDIOVASCULAR" "OBESIDAD"
## [28] "RENAL_CRONICA" "TABAQUISMO" "OTRO_CASO"
## [31] "RESULTADO" "MIGRANTE" "PAIS_NACIONALIDAD"
## [34] "PAIS_ORIGEN" "UCI"
Otra manera de identificar los nombres y tipos de variables que integran al data frame es a través de la revisión de la estructura del data frame.
str(datos_covid)
## 'data.frame': 401755 obs. of 35 variables:
## $ FECHA_ACTUALIZACION: chr "2020-06-13" "2020-06-13" "2020-06-13" "2020-06-13" ...
## $ ID_REGISTRO : chr "04f3dd" "1b7c4b" "03f6dd" "09e350" ...
## $ ORIGEN : int 2 2 2 2 2 2 2 2 2 2 ...
## $ SECTOR : int 3 3 4 4 4 4 3 4 4 4 ...
## $ ENTIDAD_UM : int 25 27 9 15 15 30 27 15 15 7 ...
## $ SEXO : int 2 1 1 1 2 1 2 2 1 1 ...
## $ ENTIDAD_NAC : int 25 27 9 15 15 30 27 15 9 7 ...
## $ ENTIDAD_RES : int 25 27 15 15 15 30 27 15 15 7 ...
## $ MUNICIPIO_RES : int 6 5 58 37 122 193 13 109 54 97 ...
## $ TIPO_PACIENTE : int 1 2 1 1 2 2 1 2 1 1 ...
## $ FECHA_INGRESO : chr "2020-05-11" "2020-05-22" "2020-04-17" "2020-04-22" ...
## $ FECHA_SINTOMAS : chr "2020-05-09" "2020-05-20" "2020-04-14" "2020-04-22" ...
## $ FECHA_DEF : chr "9999-99-99" "9999-99-99" "9999-99-99" "9999-99-99" ...
## $ INTUBADO : int 97 2 97 97 2 2 97 2 97 97 ...
## $ NEUMONIA : int 2 2 2 2 2 2 2 1 2 2 ...
## $ EDAD : int 27 52 55 38 59 67 36 27 39 30 ...
## $ NACIONALIDAD : int 1 1 1 1 1 1 1 1 1 1 ...
## $ EMBARAZO : int 97 2 2 2 97 2 97 97 2 2 ...
## $ HABLA_LENGUA_INDIG : int 2 2 2 2 2 2 2 2 2 2 ...
## $ DIABETES : int 2 1 1 2 2 1 2 2 2 2 ...
## $ EPOC : int 2 2 2 2 2 2 2 2 2 2 ...
## $ ASMA : int 2 2 2 2 2 1 2 1 2 2 ...
## $ INMUSUPR : int 2 2 2 2 2 2 2 2 2 2 ...
## $ HIPERTENSION : int 2 1 1 2 2 2 2 2 2 2 ...
## $ OTRA_COM : int 2 2 2 2 2 2 2 2 2 2 ...
## $ CARDIOVASCULAR : int 2 1 2 2 2 2 2 2 2 2 ...
## $ OBESIDAD : int 2 2 1 2 2 2 2 2 2 1 ...
## $ RENAL_CRONICA : int 2 2 2 2 2 2 2 2 2 2 ...
## $ TABAQUISMO : int 2 2 2 2 2 2 2 2 2 2 ...
## $ OTRO_CASO : int 1 2 99 99 99 99 1 99 99 99 ...
## $ RESULTADO : int 1 1 1 1 1 1 1 1 1 1 ...
## $ MIGRANTE : int 99 99 99 99 99 99 99 99 99 99 ...
## $ PAIS_NACIONALIDAD : chr "México" "México" "México" "México" ...
## $ PAIS_ORIGEN : chr "99" "99" "99" "99" ...
## $ UCI : int 97 2 97 97 2 2 97 2 97 97 ...
O también se puede dar un vistazo a las variables que integran al data frame a partir de solicitarle al programa que arroje los primeros seis renglones de cada columna.
head(datos_covid)
## FECHA_ACTUALIZACION ID_REGISTRO ORIGEN SECTOR ENTIDAD_UM SEXO ENTIDAD_NAC
## 1 2020-06-13 04f3dd 2 3 25 2 25
## 2 2020-06-13 1b7c4b 2 3 27 1 27
## 3 2020-06-13 03f6dd 2 4 9 1 9
## 4 2020-06-13 09e350 2 4 15 1 15
## 5 2020-06-13 187fc7 2 4 15 2 15
## 6 2020-06-13 07b426 2 4 30 1 30
## ENTIDAD_RES MUNICIPIO_RES TIPO_PACIENTE FECHA_INGRESO FECHA_SINTOMAS
## 1 25 6 1 2020-05-11 2020-05-09
## 2 27 5 2 2020-05-22 2020-05-20
## 3 15 58 1 2020-04-17 2020-04-14
## 4 15 37 1 2020-04-22 2020-04-22
## 5 15 122 2 2020-04-21 2020-04-21
## 6 30 193 2 2020-05-02 2020-04-22
## FECHA_DEF INTUBADO NEUMONIA EDAD NACIONALIDAD EMBARAZO HABLA_LENGUA_INDIG
## 1 9999-99-99 97 2 27 1 97 2
## 2 9999-99-99 2 2 52 1 2 2
## 3 9999-99-99 97 2 55 1 2 2
## 4 9999-99-99 97 2 38 1 2 2
## 5 9999-99-99 2 2 59 1 97 2
## 6 9999-99-99 2 2 67 1 2 2
## DIABETES EPOC ASMA INMUSUPR HIPERTENSION OTRA_COM CARDIOVASCULAR OBESIDAD
## 1 2 2 2 2 2 2 2 2
## 2 1 2 2 2 1 2 1 2
## 3 1 2 2 2 1 2 2 1
## 4 2 2 2 2 2 2 2 2
## 5 2 2 2 2 2 2 2 2
## 6 1 2 1 2 2 2 2 2
## RENAL_CRONICA TABAQUISMO OTRO_CASO RESULTADO MIGRANTE PAIS_NACIONALIDAD
## 1 2 2 1 1 99 México
## 2 2 2 2 1 99 México
## 3 2 2 99 1 99 México
## 4 2 2 99 1 99 México
## 5 2 2 99 1 99 México
## 6 2 2 99 1 99 México
## PAIS_ORIGEN UCI
## 1 99 97
## 2 99 2
## 3 99 97
## 4 99 97
## 5 99 2
## 6 99 2
Otra manera de explorar un data frame es a partir de solicitar al programa que muestre variables seleccionadas, a diferencia de las opciones anteriores en donde se arrojaron todas las variables en una misma indicación. La manera más sencilla de acceder a una de las variables (columnas) contenidas dentro de un data frame es a partir del operador “$”, que se posiciona después de indicar el nombre del objeto o data frame analizado y, posteriormente, se introduce el nombre de la variable de interés.
class(datos_covid $ SEXO) #tipo de variable
## [1] "integer"
head(datos_covid $ SEXO) #primeros seis valores
## [1] 2 1 1 1 2 1
Tomando en consideración que un data frame es un conjunto de filas y
columnas, en en cada intersección se encuentran las observaciones
correspondientes a cada par de (fila, columna), en R también se puede
acceder ya sea a una o un conjunto de filas o columnas, o celdas
específicas. Para ello se utiliza el signo [f, c ]
después
del objeto. Por ejemplo:
datos_covid_filas_1_50 <- datos_covid[c(1 : 50), ] #acceso a las filas 1 a 50 del data frame, incluyendo todas las columnas
Acceso a columnas seleccionadas para todas las filas:
datos_covid_columnas <- datos_covid[ , c(2, 3, 4, 8, 10)] #acceso a las columnas 2, 3, 4, 8 y 10 del data frame para todas las filas
Otra manera de seleccionar algunos casos específicos es mediante una extracción lógica de elementos con combinaciones condicionadas por “y” u “o”:
Casos con intersección de características (“A y B”):
datos_cond_y <- datos_covid[datos_covid $ EDAD < 70 &
datos_covid $ SEXO == 1, ] #selección de casos que cumplen 2 condiciones simultáneamente: personas con edad menor a 70 años Y que son hombres (SEX = 1) para todas las filas
Casos disjuntos a partir de ciertas características (“A o B”):
datos_cond_o <- datos_covid[datos_covid $ EDAD < 35 |
datos_covid $ EDAD > 50, ] #selección de casos que cumplen una de dos condiciones posibles: personas menores de 35 años o mayores de 50 para todas las filas
Otra manera para acceder a diversas variables seleccionadas se apoya en la librería dplyr -que se instaló previamente-, y es una de las opciones más útiles pues cuenta con una serie de instrucciones para lograrlo, que se irán revisando poco a poco.
library(dplyr) #instalación de la librería
Una manera de acceder a la exploración de variables específicas,
consiste en la selección de las variables de interés a partir de la
opción select()
, que forma parte de la librería
dplyr()
. Un aspecto nuevo, y que será muy útil
posteriormente, consiste en la instrucción %>%
(pipe).
Esta instrucción permite vincular otras instrucciones mientras se avanza
de izquierda a derecha en el script, y se lee como then o
entonces.
datos_covid %>% #objeto o data frame
select(SEXO, INTUBADO, EDAD, RESULTADO) %>% #seleccionar variables de interés
glimpse #vistazo a tipo y valores de variables seleccionadas
## Rows: 401,755
## Columns: 4
## $ SEXO <int> 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 2, 2, …
## $ INTUBADO <int> 97, 2, 97, 97, 2, 2, 97, 2, 97, 97, 2, 97, 2, 97, 97, 2, 97,…
## $ EDAD <int> 27, 52, 55, 38, 59, 67, 36, 27, 39, 30, 42, 37, 41, 33, 44, …
## $ RESULTADO <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
La librería dplyr cuenta con una serie de funciones básicas que permiten manipular tanto las filas como las columnas de un data frame, pues en ocasiones se requiere ajustar la información contenida en la matriz de datos a las necesidades de la investigación en turno. Las funciones básicas que incluye dplyr son:
filter()
: devuelve un conjunto de filas según una o
varias condiciones lógicas.covid_hombre <- datos_covid %>%
filter(SEXO == 2 & ORIGEN == 1) #se generó un objeto nuevo que contiene solo datos de todas las variables para casos de hombre solamente y de origen USMER.
arrange()
: reordena filas de un data frame.datos_covid <- datos_covid %>%
arrange(EDAD) #se ordenaron los casos de manera ascendente a partir del criterio de EDAD
select()
: devuelve un conjunto de columnas
seleccionadas.covid_edad_sexo <- datos_covid %>%
select(ORIGEN, SEXO, INTUBADO, EDAD, RESULTADO, UCI)
mutate()
: añade nuevas variables / columnas o
transforma variables existentes.covid_hombre <- covid_hombre %>%
mutate(edad_cuad = EDAD ^ 2) #elevación al cuadrado de la EDAD
covid_hombre <- covid_hombre %>%
mutate(tipo_sector = ifelse(SECTOR < 6,
"un tipo", #todos los valores menores a 6
"segundo tipo")) #todos los valores restantes o de 6 en adelante
covid_hombre <- covid_hombre %>%
mutate(sex_rec = recode(SEXO,
`1`= 1,
`2`= 0))
summarise()
: genera una tabla con resúmenes
estadísticos de diferentes variables.datos_covid %>%
group_by(SEXO) %>% # agrupa los casos a partir de las categorías dentro de la variable SEXO
summarise(media = mean(EDAD), desviación = sd(EDAD), cantidad = n())
## # A tibble: 2 × 4
## SEXO media desviación cantidad
## <int> <dbl> <dbl> <int>
## 1 1 42.0 16.4 197301
## 2 2 43.2 17.0 204454
sample_n()
: genera muestras aleatorias a partir de los
datos / filas de un data frame.submuestra <- datos_covid %>%
sample_n(500, replace = FALSE) #tamaño de la muestra, selección de casos entre las muestras
rename()
: renombra variables existentes en un data
frame.submuestra <- datos_covid %>%
rename(tipo_sector = SECTOR)
Para guardar datos se pueden usar los comandos:
write.table()
y write.csv()
-los objetos
tipo DF o matriz podemos guardarlos, uno a la vez, en un archivo externo
manteniendo su estructura-, con los siguientes argumentos:
donde «x» es el objeto que queremos escribir (en formato matriz o data.frame), en «file» especificamos la ruta y nombre del documento que deseamos abrir/guardar, aquí «append» solo relevante si el archivo es una cadena de caracteres (si es TRUE, la salida se agrega al archivo, si es FALSE se destruye cualquier archivo existente del nombre), «quote» sirve para indicar si queremos comillas a los nombres (TRUE/FALSE o índices), con «sep» indicamos el tipo de separador de los datos («,», «;», «, etc.), con «na» indicamos cómo vienen representados los datos ausentes (NA, algunos usan los valores 999 o 9999, pero no lo recomiendo), la opción «dec» nos permite especificar cómo están dados los decimales (con «,» o «.»;recuerden que R utiliza punto y Excel comas), con «col.names» o «row.names» indicamos los nombres de columnas y filas que queremos escribir, con «na.strings» podemos indicar qué valor o carácter va a especificar los valores ausentes o NA.
write.table(datos_covid, file = "datos_covid1.txt", row.names = TRUE) #guarda un archivo en formato ".txt"
write.csv(datos_covid, file = "datos_covid2.csv", row.names = TRUE) #guarda un archivo en formato ".csv"
write.xlsx(datos_covid, file = "datos_covid3.xlsx", row.names = TRUE) #guarda un archivo en formato ".xls"
## Warning: Please use 'rowNames' instead of 'row.names'
Abrir en R Studio la base de datos sobre enfermos infectados por COVID-19 en México que genera la Dirección General de Epidemiología de la Secretaría de Salud del gobierno federal. Acá pueden descargar una versión de la base Base Covid-19.
Explorar la estructura de la base para identificar: i. la cantidad de variables que contiene, ii. la manera en que están codificadas las variables, iii. identificar si los tipos de variables corresponden con las codificaciones de las variables en la base.
Agrupar casos según la variable de “RESULTADO”, y calcular el promedio y desviación estándar o típica de la edad de los casos, además de la cantidad de casos por cada grupo.
Transformar la variable “SECTOR” y reducirla a dos categorías: i. sector público, ii. sector privado, y calcular la proporción de casos según el “RESULTADO”.