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.
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.
Luego de instalarla, podemos abrir y probar la consola de base con un simple código:
plot(1:10)
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.
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.
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")
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},
## }
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
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
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
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.
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.
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