Introducción a R

R es un lenguaje de programación abierto y gratuito muy popular para el análisis de datos en las ciencias sociales. Tiene como ventaja que permite prácticas de investigación robustas y reproducibles, y es evidente en la lógica detrás de sus procesos y de las decisiónes del investigador. Permite hacer análisis y transformaciones de bases de datos de forma sistemática.

R está disponible para Windows, MacOS y Linux, al ser abierto, tiene una gran comunidad de apoyo en linea para ayuda con problemas en el código o solución de problemas con nuevas funciones. Tiene herramientas extensivas y coherentes para el análisis estadístico.

¿Cómo empezar?

Instalación de R

Para instalar R, debemos ir a la página del CRAN (Comprehensive R Archive Network) e instalar de manera gratuita la última versión de R para nuestro sistema operativo.

https://cloud.r-project.org/

Luego de instalarla, podemos abrir y probar la consola de base con un simple código:

plot(1:10)

Instalación de RStudio

Podemos ver que aunque esta interfaz funciona, no es muy amigable con el usuario y es muy limitada en sus herramientas. Para eso está RStudio, una IDE (Integrated Development Environment) con más funciones para crear código en R.

La podemos instalar de manera gratuita en su página de internet. https://rstudio.com/

Al abrir RStudio podemos ver que a la izquierda tenemos el pánel con la consola, acá insertaremos nuestro código para ejecutarlo. Arriba a la derecha tenemos el espacio de trabajo con nuestros objetos y el historial. Abajo a la derecha están los archivos locales, los paquetes y la visualización de los documentos y gráficos que creemos en la consola con el código.

Aunque podemos editar y crear códigos en la consola, lo ideal es guardarlo en un documento de R Script o de R Markdown para que no se pierda al cerrar la aplicación. Lo recomendable es usar los cuadernos de R Markdown para tomar apuntes y complementar el código con explicaciones escritas.

Para abrir un documento de R Markdown vamos a File > New File > R Markdown. Podemos encontrar el tutorial de R Markdown acá:

https://rpubs.com/tomasvbg123/1011228

Luego de tener este documento abierto, tendremos 4 paneles en RStudio, estos se pueden editar en Tools > Global Options > Pane Layout.

Paquetes o librerías

La instalación base de R viene con algunas funciones estadísticas para analizar datos; no obstante, la gran mayoría de herramientas están en paquetes/librerías con miles de funciones adicionales que se utilizan en el día a día. R cuenta con más de 15.000 librerías independientes en su repositorio para los usuarios.

Para instalar un paquete, solo hay que utilizar la función install.packages("PAQUETE"). Es importante poner el paquete entre comillas. Y para abrirlo y acceder a sus funciones utilizamos library(PAQUETE). Por ejemplo una de las librerías más básicas es tidyverse, un conjunto de librerías para el análisis de datos.

A veces para instalar una librería nos pide tener ya instaladas otras librerías distintas, para instalarlas automáticamente podemos añadir dependencies = TRUE. Las librerías no se actualizan automáticamente, por lo que de vez en cuando es bueno correr la función update.packages(), añadimos ask = FALSE para que no nos pregunte por cada paquete que se puede actualizar.

Proyectos

En R se trabaja con una gran cantidad de datos y de información separada, por lo que es bueno mantenerla organizada y en un solo lugar. Con los proyectos de R podemos tener espacios de trabajo organizados que queden guardados por si en algún momento retomamos una investigación.

Para crear un proyecto vamos a File > New Proyect > New Directory. Esto creará una nueva carpeta en nuestro computador que se convertirá en nuestro directorio o espacio de trabajo. Acá van todos los archivos relacionados con el proyecto. Todos los archivos que creemos/exportemos/guardemos irán automáticamente al directorio. Para saber cuál es el directorio actual podemos usar la función getwd.

getwd()
## [1] "C:/Users/tomas/OneDrive/Documents/Curso de R"

Si queremos cambiar el directorio, podemos usar la función setwd().

setwd("C:/Users/tomas/OneDrive/Documents/Curso de R")

Citar R

Si usamos R en nuestros trabajos, es importante mencionarlo y citar a quienes trabajaron en la interfaz y en las librerías.

citation()
## 
## To cite R in publications use:
## 
##   R Core Team (2022). R: A language and environment for statistical
##   computing. R Foundation for Statistical Computing, Vienna, Austria.
##   URL https://www.R-project.org/.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {R: A Language and Environment for Statistical Computing},
##     author = {{R Core Team}},
##     organization = {R Foundation for Statistical Computing},
##     address = {Vienna, Austria},
##     year = {2022},
##     url = {https://www.R-project.org/},
##   }
## 
## We have invested a lot of time and effort in creating R, please cite it
## when using it for data analysis. See also 'citation("pkgname")' for
## citing R packages.
citation(package = "tidyverse")
## 
## To cite package 'tidyverse' in publications use:
## 
##   Wickham H, Averick M, Bryan J, Chang W, McGowan LD, François R,
##   Grolemund G, Hayes A, Henry L, Hester J, Kuhn M, Pedersen TL, Miller
##   E, Bache SM, Müller K, Ooms J, Robinson D, Seidel DP, Spinu V,
##   Takahashi K, Vaughan D, Wilke C, Woo K, Yutani H (2019). "Welcome to
##   the tidyverse." _Journal of Open Source Software_, *4*(43), 1686.
##   doi:10.21105/joss.01686 <https://doi.org/10.21105/joss.01686>.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Article{,
##     title = {Welcome to the {tidyverse}},
##     author = {Hadley Wickham and Mara Averick and Jennifer Bryan and Winston Chang and Lucy D'Agostino McGowan and Romain François and Garrett Grolemund and Alex Hayes and Lionel Henry and Jim Hester and Max Kuhn and Thomas Lin Pedersen and Evan Miller and Stephan Milton Bache and Kirill Müller and Jeroen Ooms and David Robinson and Dana Paige Seidel and Vitalie Spinu and Kohske Takahashi and Davis Vaughan and Claus Wilke and Kara Woo and Hiroaki Yutani},
##     year = {2019},
##     journal = {Journal of Open Source Software},
##     volume = {4},
##     number = {43},
##     pages = {1686},
##     doi = {10.21105/joss.01686},
##   }

Objetos

Todo en R es un objeto, desde un número hasta una base de datos. Todos los objetos se crean con la función <- como una flecha. Por ejemplo:

Objeto_1 <- 90

Ahora en la pestaña de Environment debe aparecer nuestro nuevo objeto, de tipo numérico y con un valor de 90. Los nombres de los objetos no deben llevar espacios ni caracteres especiales, se recomienda usar “_” para los espacios. Podemos cambiar un objeto renombrándolo:

Objeto_1 <- "Un objeto"

Ahora nuestro objeto es de tipo “character”, el contenido de los objetos sí puede incluir espacios y otros caracteres. Para ver qué contiene un objeto, solo tenemos que escribir su nombre, y se pueden manipular dependiendo de sus características. Por ejemplo, podemos hacer operaciones entre objetos numéricos.

Obj1 <- 58
Obj2 <- 32
Obj3 <- Obj1 + Obj2
Obj3
## [1] 90

Funciones y vectores

Para crear objetos más complejos, modificarlos y manipularlos de cualquier forma, existen las funciones. Una función contiene una serie de instucciones para hacer tareas específicas.

La función más básica es la c(). Está función sirve para concatenar una serie de valores y almacenarlos en una sola estructura llamada vector.

Vector1 <- c(2,3,1,5,3,4,2)

A este grupo de números, le podemos aplicar otras funciones estadísticas para entenderlo. Por ejemplo el promedio (mean()), la varianza (var()), la desviación estándar (sd()) o la longitud (length())

mean(Vector1)
## [1] 2.857143
var(Vector1)
## [1] 1.809524
sd(Vector1)
## [1] 1.345185
length(Vector1)
## [1] 7

También podemos guardar estos valores en su propio objeto para usarlo después:

DE_Vector <- sd(Vector1)

Para crear vectores, es útil usar el argumento : y las funciones seq() y rep(). Por ejemplo

Vector2 <- 1:10
Vector2
##  [1]  1  2  3  4  5  6  7  8  9 10
Vector3 <- seq(from = 1, to = 10, by = 2)
Vector3
## [1] 1 3 5 7 9
Vector4 <- rep(2, times = 10)
Vector4
##  [1] 2 2 2 2 2 2 2 2 2 2

Podemos usar las funciones juntas para crear vectores únicos:

Vector5 <- rep(c(seq(from=2, to=5, by=0.5), 6:10), times=2)
Vector5
##  [1]  2.0  2.5  3.0  3.5  4.0  4.5  5.0  6.0  7.0  8.0  9.0 10.0  2.0  2.5  3.0
## [16]  3.5  4.0  4.5  5.0  6.0  7.0  8.0  9.0 10.0

Extraer elementos de vectores

Para modificar elementos específicos dentro de un vector, utilizamos los símbolos [] con la siguiente estructura VECTOR[POSICIÓN DEL ELEMENTO DENTRO DEL VECTOR], también lo podemos extraer con operadores lógicos. Por ejemplo:

Vector1
## [1] 2 3 1 5 3 4 2
Vector1[3]
## [1] 1
Vector1[c(3,5)]
## [1] 1 3
Vector1[Vector1 > 2]
## [1] 3 5 3 4

Estos operadores lógicos como < (menor que), > (mayor que), >= (mayor o igual), == (igual a), != (diferente a) pueden usarse para extraer datos o para hacer comprobaciones lógicas a los vectores. También se pueden mezclar con los operadores de & (y), | (o) para combinaciones lógicas. Por ejemplo, seleccionemos los valores de Vector2 que sean mayores a 7 o menores a 3.

Vector2[Vector2 > 7 | Vector2 < 3]
## [1]  1  2  8  9 10

Reemplazar elementos

Usando la notación de [] también podemos reemplazar elementos en un vector. Por ejemplo, para reemplazar el 4 valor de Vector2 por 100 usamos:

Vector2[4] <- 100
Vector2
##  [1]   1   2   3 100   5   6   7   8   9  10

Acá también podemos usar los operadores lógicos y las expresiones de & y | para reemplazar m+as de un elemento a la vez.

Ordenar elementos

La última función básica para trabajar con vectores es la de ordenar elementos. Para ordenar elementos dentro de un solo vector usamos sort() que automáticamente los pone en órden ascendiente, para ponerlos en orden descendiente podemos usar decreasing = TRUE.

Vector2_desc <- sort(Vector2, decreasing = TRUE)
Vector2_desc
##  [1] 100  10   9   8   7   6   5   3   2   1
Vector2_asc <- sort(Vector2)
Vector2_asc
##  [1]   1   2   3   5   6   7   8   9  10 100

Ahora vamos a ordenar un vector en función de otro vector, por ejemplo una lista de nombres según su altura. Primero debemos crear nuevos vectores con alturas de personas y con sus nombres:

alts <- c(155, 191, 165, 160, 173, 185)
nombs <- c("Luisa", "Juan", "Laura", "Pedro", "Lina", "Santiago")

Para ordenar los nombres según su altura, primero necesitamos el orden de las alturas dentro del vector. Para esto usamos la función order(), que nos da el orden de los elementos dentro del vector como un vector propio.

ord_alts <- order(alts)
ord_alts
## [1] 1 4 3 5 6 2

Ahora que ya tenemos el orden, podemos poner a la lista de nombres en función del orden de las alturas para obtener el orden de los nombres. Para esto no necesitamos ninguna función, solo seleccionar los elementos con []

ord_nombs <- nombs[ord_alts]
ord_nombs
## [1] "Luisa"    "Pedro"    "Laura"    "Lina"     "Santiago" "Juan"

Así, podemos ordenar dos columnas o dos listas sin desvincular la una de la otra.

Datos faltantes

En muchas bases de datos, suele haber información faltante o celdas incompletas. R representa esta información como NA. Cuando hay datos faltantes R no permite hacer operaciones numéricas a menos que utilicemos la expresión na.rm = TRUE. Siempre que usemos este argumento, R va a ignorar todas las casillas que contengan NA.

VectorNA  <- c(7.2, NA, 7.1, 6.9, 6.5, 5.8, 5.8, 5.5, NA, 5.5)
mean(VectorNA)
## [1] NA
mean(VectorNA, na.rm = TRUE)
## [1] 6.2875