Documento

Este documento es base para dictado de los talleres del Proyecto de Innovación a la Docencia “Introducción a R para Ciencias Sociales”. El objetivo de este taller es brindar las herramientas introductorias para la utilización de R a través de su plataforma R-Studio.

¿Qué es R?

  • R es un lenguaje de procesamiento y análisis estadísticos de datos
  • Es un software libre y colaborativo
  • Comunidades científicas muy difundidas que aportan sus herramientras

¿Cuáles son las ventajas de aprender R y RStudio?

  • Análisis estadístico avanzado
  • Manejo de grandes volúmenes de datos
  • Visualización: potentes herramientas gráficas y muchas opciones de publicación
  • Reproductibilidad: se facilita la producción de análisis reproducibles y reportes sociabilizables
  • Investigación y Modelado Textual: análisis de discursos y minería de datos
  • Paquetes especializados: producción de librerías específicas para distintos tipos de áreas, como redes sociales, encuestas, cadenas de Markov, demografía, etc…
  • Flexibilidad: sus librerías y funciones son altamente personabilizables
  • Desarrollo libre: desarrollo constante de librerías para temas específicos
  • Comunidad: gran comunidad donde se profundiza y facilita su uso (tutoriales, foros, jornadas, ámbitos, documentos, videos… y etc)

Algunos recursos

R Studio

R Studio es un entorno de desarrollo integrado (IDE) para el lenguaje de programación R, orientado al procesamiento estadístico. Su interfaz se ve así:

Interfaz de RStudio
Interfaz de RStudio

A partir de esta interfaz hay muchas formas de trabajar. Se puede trabajar directamente en la consola, crear archivos de sintaxis e ir ejecutándolos total o parcialmente, o bien crear projectos completos que agrupan todos los elementos en una única carpeta bajo el directorio “~/documentos/R/”

Sintaxis en R

Objetos

Los objetos son el elemento escencial en R. Todo es un objeto y puede ser almacenado con un nombre (que no debe contener espacios). Desde un número, un vector, una cadena de caracteres, un gráfico, una tabla, una base de datos, una función, etc.

Los objetos se crean utilizando el operador <-. A la izquierda del operador se pone el nombre, y a la derecha la sintaxis que crea o define el objeto.

Por ejemplo, si queremos crear un objeto que sea igual a un número, por ejemplo 1, y lo llamamos “a”, se crea de la siguiente forma:

a <- 1

Este elemento queda guardado en el ambiente del programa, por lo que podremos disponer del mismo posteriormente, y operar con/en él.

Lo podemos invocar por su nombre:

a
## [1] 1

O realizar una operación:

a*2
## [1] 2

También se puede utilizar el símbolo =, pero como el mismo también se utiliza dentro de las funciones, se presta a confusión. También <- es unidireccional, por lo que implica que lo del lado izquierdo se somete a lo del lado derecho:

b = 3 # Creo el objeto b=3
a <- b  # defino a como b

Ahora el nombre a significa un 3, y ya no un 1.

a
## [1] 3

Operadores lógicos

Los operadores utilizados por R son los habituales en la lógica de programación: > mayor >= mayor igual < menor <= menor igual == igual != distinto

Los operadores lógicos nos serviran para establecer condiciones y comparar variables. Los resultados de dichas comparaciones también pueden ser almacenados como objetos:

a == b
## [1] TRUE
2>3
## [1] FALSE
c <- 2!=3
c
## [1] TRUE

Operadores aritméticos

Las operaciones aritméticas también funcionan con sus caracteres habituales, tales como + suma, - resta, * multiplicación y / división

a+b
## [1] 6
26/2
## [1] 13
4^2
## [1] 16
25^(1/2)
## [1] 5

Funciones

Las funciones son una serie de pasos estandarizados que asocian una serie de inputs según cierta lógica, brindando un output a partir de los mismos. Para lograr tal resultado, a las funciones se les brindan distintos argumentos. R sigue el siguiente esquema para definir una función funcion(argumento_1 = arg_1, argumento_2 = arg_2, ..., argumento_n = arg_n), donde primero se define la función, y entre paréntesis se van definiendo los argumentos nombrando cada uno (esto es opcional, puedo poner el valor del argumento en orden si la sé), definiendo el valor del argumento con el signo = y luego dándole el valor deseado, separando cada argumento por una ,.

Tomando como ejemplo la función paste(), la cual une los distintos elementos mencionados, separados por el caracter que se define a tal fin al final.

paste("hola", "mundo!", "esto", "es", "una", "prueba", sep=" ")
## [1] "hola mundo! esto es una prueba"

O bien se puede hacer con objetos, los cuales no se deben citar entre comillas

paste(a, b, c, sep=" -.- ")
## [1] "3 -.- 3 -.- TRUE"

Hay otras funciones de relevancia, tales como sum() que suma los valores numéricos incluidos allí, mean() que calcula el promedio de una serie de valores numéricos, y otros más.

a
## [1] 3
b
## [1] 3
sum(a, b)
## [1] 6
sum(a, b, 8)
## [1] 14

Caracteres especiales

El lenguaje R diferencia entre MAYÚSCULAS y minúsculas, por lo que A es distinto de a. Si le designo un valor a a reemplazo al anterior, pero si se lo designo a A me crea un objeto nuevo:

a <- 5
a
## [1] 5
A <- 6
A
## [1] 6
a
## [1] 5
a+A
## [1] 11

Los espacios y el carriage return (enter) no son leídos por el lenguaje. Esto es muy útil para hacer más prolijo el código y más entendible

sum(1,3,15,18)
## [1] 37
sum( 1,
     3,
    15,
    18)
## [1] 37

El numeral # se utiliza para comentar el código, ya que el lenguaje deja de leer dicha línea a partir del #

sum(1, 3, 15, 18) #esta función realiza la suma de los números 1+3+15+18
## [1] 37

Los corchetes [] sirven para acceder a un objeto dentro de otro, tal que:

 - en un vector [número de orden]
 - en una tabla [fila, columna]
 - en una lista [número de elemento]

El signo $ sirve para acceder a una variable dentro de un data frame (una columna específica dentro de una tabla)

Objetos

Los objetos de R pueden ser

- Valores
- Vectores: conjunto de valores
- Data frames: base de datos, tablas
- Listas: conjunto de objetos

Valores

Los valores de R pueden ser de distintas clases: numéricos, caracteres, factores, entre otros

d <- 3 #Valor
class(d)
## [1] "numeric"
e <- paste("hola", "mundo!", sep=" ") #caracter
class(e)
## [1] "character"
f <- factor("hola mundo!") #factor
class(f)
## [1] "factor"

Vectores

Los vectores son una combinación de elementos. Se crean a través de la función c()

g <- c(1, 2, 4)
g
## [1] 1 2 4

Trabajar sobre un vector, hace que se opere sobre todos los valores, tal que:

g+2
## [1] 3 4 6
g*4
## [1]  4  8 16

Se pueden crear vectores con caracteres tambien:

h <- c("maria", "pedro", "zamba")
h
## [1] "maria" "pedro" "zamba"

Con los [] se llama a un elemento específico del vector, que se puede utilizar o guardar para crear otro objeto

g
## [1] 1 2 4
g[3]
## [1] 4
h
## [1] "maria" "pedro" "zamba"
i <- h[2]
i
## [1] "pedro"

Si lo embocamos a la izquierda, reemplazamos ese valor

h
## [1] "maria" "pedro" "zamba"
h[1] <- "julieta"
h
## [1] "julieta" "pedro"   "zamba"

Data Frame

Un Data Frame es un objeto que se refiere a un conjunto de datos ordenados, una tabla de datos o una base de datos, donde cada columna significa una variable y cada fila una observación. Es uno de los elementos centrales de R, y se asocia mucho con el trabajo habitual que se realiza en R, tanto a través de la generación de DF en el mismo entorno como por la importación de datos externos de distinto formato. Tabmién se puede crear un DF a partir de la combinación de distintos vectores.

Por ejemplo: podemos crear tres vectores de nombre, sexo y edad y agruparlos bajo la lógica de un data frame:

nombre <- c("ema", "laura", "silvia", "roman", "adam")
edad <- c(10, 12, 8, 15, 9)
sexo <-c("hombre", "mujer", "mujer", "hombre", "hombre")

datos <- data.frame(nombre, edad, sexo)
class(datos)
## [1] "data.frame"
datos
##   nombre edad   sexo
## 1    ema   10 hombre
## 2  laura   12  mujer
## 3 silvia    8  mujer
## 4  roman   15 hombre
## 5   adam    9 hombre

Para acceder a elementos particulares del DF podemos usar los [] donde tendremos dos elementos separados por una ,, explicitando filas y columnas: [fila, columna]

datos[1,3]
## [1] "hombre"
datos[1,]
##   nombre edad   sexo
## 1    ema   10 hombre
datos[,3]
## [1] "hombre" "mujer"  "mujer"  "hombre" "hombre"

También podemos usar el operador $ para acceder a una columna en particular, mencionando su nombre:

datos$sexo
## [1] "hombre" "mujer"  "mujer"  "hombre" "hombre"
datos$sexo[2]
## [1] "mujer"

Esta metodología es útil para imponer condiciones lógicas a modo de filtrar las bases, según condicionantes que se pongan en sus filas o columnas, dentro de los [,]. Por ejemplo, si solo quisiera los registros de las mujeres, debería establecer la condición sexo=="mujer" dentro de los condicionantes que se imponen a las filas del DF:

datos[sexo=="mujer",]
##   nombre edad  sexo
## 2  laura   12 mujer
## 3 silvia    8 mujer

La lógica de esta sintaxis sería accedo al DF “datos” y me quedo con las filas que contienen la cadena de caracteres “mujer” dentro de la columna “sexo”, y me quedo con todas las columnas.

O podría imponer una condición de mayor o menor. Por ejemplo, solicitando los registros mayores a 10 años de edad:

datos[edad>10,]
##   nombre edad   sexo
## 2  laura   12  mujer
## 4  roman   15 hombre

A través de dichos filtros, nos permiten operar sobre el DF en partes diferenciadas de la misma. Por ejemplo, calcular el edad promedio de los hombres y de las mujeres, se podría realizar de la siguiene forma:

datosh <- datos[sexo=="hombre",] #Se crea un objeto que es un df de solo hombres

mean(datosh$edad) #se calcula el promedio de la columna edad
## [1] 11.33333
mean(datos[sexo=="mujer",]$edad) # Aquí no crea el df de mujeres, sino que lo filtra y lo calcula directamente sobre el mismo
## [1] 10

Listas

Las listas son una concatenación de distintos elementos independientes, que puede ser de cualquier clase. Pueden tener relación entre ellos o no. Por ejemplo: puede ser un conjunto de DF, de vectores, de valores, etc.

lista <- list(a, A, b, c, g, h, datos, datosh)

lista
## [[1]]
## [1] 5
## 
## [[2]]
## [1] 6
## 
## [[3]]
## [1] 3
## 
## [[4]]
## [1] TRUE
## 
## [[5]]
## [1] 1 2 4
## 
## [[6]]
## [1] "julieta" "pedro"   "zamba"  
## 
## [[7]]
##   nombre edad   sexo
## 1    ema   10 hombre
## 2  laura   12  mujer
## 3 silvia    8  mujer
## 4  roman   15 hombre
## 5   adam    9 hombre
## 
## [[8]]
##   nombre edad   sexo
## 1    ema   10 hombre
## 4  roman   15 hombre
## 5   adam    9 hombre

Para acceder a los elementos de una lista acudo a los []

lista[3]
## [[1]]
## [1] 3
lista[[2]]
## [1] 6
lista[[6]][2] #Accede al 6° elemento de la lista, y allí a su 2° elemento
## [1] "pedro"

Si la lista tiene nombre, para acceder a subelementos de las listas, se puede utilizar $ iterativamente, e incluso los [] cuando corresponda (en vectores y df):

lista2 <- list(a=a, A=A, otro=b, logico=c, vector=g, vector2=h, df=datos, dfh=datosh)

lista2$A
## [1] 6
lista2$vector
## [1] 1 2 4
lista2$vector2[2]
## [1] "pedro"
lista2$df
##   nombre edad   sexo
## 1    ema   10 hombre
## 2  laura   12  mujer
## 3 silvia    8  mujer
## 4  roman   15 hombre
## 5   adam    9 hombre
lista2$df$edad
## [1] 10 12  8 15  9
lista2$df[edad>10,]
##   nombre edad   sexo
## 2  laura   12  mujer
## 4  roman   15 hombre
lista2$df$edad[3]
## [1] 8