Author

Edimer David Jaramillo

Fuente de imágenes

Bibliotecas R

Code
library(tidyverse) # Manipulación de datos y gráficosos
library(lubridate) # Manipulación de fechas y tiempoo
library(readxl)    # Lectura de archivos de excel (.xls o .xlsx)
library(janitor)   # Lo usamos para editar los nombres de las bases de datos

Introducción a R

Generalidadles

  • R Discrimina minúsculas de mayúsculas
  • Los comentarios en R se denotan con el “#”
  • Ecosistema R Markdown y Quarto
  • Publicación de documentos en Rpubs

Acceso rápido

  • Ctrl + Enter: ejecutar línea de código
  • Ctrl + L: limpiar consola
  • Ctrl + Alt + i: insertar fragmento de R a documentos R Markdown o Quarto.
  • CTRL + Shift + K: Compilar documentos desde .Rmd o .qmd
  • CTRL + Shift + M: Insertar tubería desde RStudio

Asignación

Tipos de datos



Vectores atómicos

Numéricos

Code
dato_numerico1 <- 22.50 # 0 dimensiones
  • ¿Cómo crear un vector numérico?
Code
vector_num <- c(22.1, 10, 50.2) # 1 dimensión
Code
vector_num + 50
[1]  72.1  60.0 100.2
  • Podemos consultar el tipo de datos a través de las funciones class() y typeof:
Code
class(vector_num)
[1] "numeric"
Code
typeof(vector_num)
[1] "double"
  • Podemos consultar la longitud de una varialbe:
Code
length(vector_num)
[1] 3

Texto

Code
dato_texto1 <- "universidad"
class(dato_texto1)
[1] "character"
Code
typeof(dato_texto1)
[1] "character"
  • Podemos crear un vector de texto:
Code
vector_texto1 <- c("nombre", 'apellido', "ciudad")
class(vector_texto1)
[1] "character"
Code
typeof(vector_texto1)
[1] "character"
  • Puedo consultar la longitud:
Code
length(vector_texto1)
[1] 3
  • ¿Cómo puedo contar cuántas letras tiene cada elemento del vector de texto?
Code
nchar(vector_texto1)
[1] 6 8 6
  • ¿Qué pasa con el espacio en blanco? ¿También se cuenta?
Code
texto1 <- "ciudad"
texto2 <- "ciudad "
nchar(texto1)
[1] 6
Code
nchar(texto2)
[1] 7

Enteros

Code
entero1 <- 20
class(20)
[1] "numeric"
Code
entero1
[1] 20
Code
entero1 + 50
[1] 70
  • ¿Cómo puedo almacenar un número de naturaleza discreta (entero)?
Code
entero2 <- 20L
class(entero2)
[1] "integer"
Code
typeof(entero2)
[1] "integer"
  • También puedo crear un vector de número enteros:
Code
entero3 <- c(10L, 20L, 30L)
class(entero3)
[1] "integer"
Code
typeof(entero3)
[1] "integer"

Factores

  • Los factores representan variables cualitativas ordinales
  • Podemos controlar el orden de los elementos
  • Por defecto R siempre organizará el texto de manera alfabética
Code
meses <- c("enero", "febrero", "marzo", "abril", "mayo", "junio", "enero")
class(meses)
[1] "character"
  • Puedo pasar la variable “meses” a factor con la función factor():
Code
meses_factor1 <- factor(meses)
class(meses_factor1)
[1] "factor"
Code
meses
[1] "enero"   "febrero" "marzo"   "abril"   "mayo"    "junio"   "enero"  
Code
meses_factor1
[1] enero   febrero marzo   abril   mayo    junio   enero  
Levels: abril enero febrero junio marzo mayo
  • El orden en el que asignó los meses es incorrecto, ya que aparece de primero el mes de “abril”. Podemos reordenar los niveles a través del arguemnto “levels” de la función factor():
Code
mes_ordenado <- factor(meses, levels = c("enero", "febrero", "marzo", "abril",
                                         "mayo", "junio"))
mes_ordenado
[1] enero   febrero marzo   abril   mayo    junio   enero  
Levels: enero febrero marzo abril mayo junio

Lógicos

  • Los lógicos representan dos estados: TRUE (1) o FALSE (0)
Code
logico1 <- TRUE
class(logico1)
[1] "logical"
  • También es común (no lo recomiendo) ver el TRUE o FALSE como T y F, respectivamente
Code
logico2 <- T
class(logico2)
[1] "logical"
Code
logico3 <- FALSE
class(logico3)
[1] "logical"
  • ¿Qué pasa si agregamos el TRUE o FALSE entre comillas?
Code
otro <- "TRUE"
class(otro)
[1] "character"
  • ¿Qué pasa si sumo dos TRUE?
Code
TRUE + TRUE
[1] 2
Code
TRUE + TRUE - FALSE
[1] 2
Code
TRUE * 4
[1] 4
Code
TRUE / 2
[1] 0.5
Code
vector_logico <- c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE)
class(vector_logico)
[1] "logical"
  • ¿Qué ocurre si comparo dos números para saber si son iguales?
Code
2 == 2 
[1] TRUE
Code
2 == 3
[1] FALSE
Code
2 == 2.000000000000001
[1] FALSE
  • ¿Cómo sumo un vector de números o de lógicos? La función sum() nos permite sumar elementos de un vector numérico o lógico
Code
sum(vector_logico)
[1] 3
  • ¿Qué pasa si comparo una letra con otra letra?
Code
"a" == "a"
[1] TRUE
  • ¿Qué pasa si la comparación se hace entre mayúscula y minúscula?
Code
"A" == "a"
[1] FALSE
Code
"A" > "a"
[1] TRUE
Code
"A" < "a"
[1] FALSE

Fechas/Tiempo

  • Las fechas en R se representan como Date y cuando las generamos manualmente se incorporan dentro de comillas:
Code
fecha0 <- "2022-01-01"
class(fecha0)
[1] "character"
  • ¿Cómo forzar a R para que entienda la fecha como Date? Rta// as.Date():
Code
fecha1 <- as.Date(fecha0)
class(fecha1)
[1] "Date"
  • ¿Puedo sumarle un número a fecha0 y fecha1?
Code
#fecha0 + 1 
fecha1 + 1
[1] "2022-01-02"
  • Podemos extraer información alternativa de las fechas con la biblioteca lubridate:
    • Año: year()
    • Mes: month()
    • Día del mes: day()
    • Semana del año: week()
    • Día de la semana: weekdays(). Esta función no es del paquete lubridate.
Code
# Añoo
year(fecha1)
[1] 2022
Code
# Mes como número enteroo
month(fecha1, label = FALSE)
[1] 1
Code
# Mes como texto abreviadno (ene = enero)
month(fecha1, label = TRUE, abbr = TRUE)
[1] ene
12 Levels: ene < feb < mar < abr < may < jun < jul < ago < sept < ... < dic
Code
# Mes como texto completo (enero)
month(fecha1, label = TRUE, abbr = FALSE)
[1] enero
12 Levels: enero < febrero < marzo < abril < mayo < junio < ... < diciembre
Code
# Día del mess
day(fecha1)
[1] 1
Code
# Semana del añoo
week(fecha1)
[1] 1
Code
# Día de la semanaa
weekdays(fecha1)
[1] "sábado"
  • ¿Cómo almacenar año-mes-día-hora-minutos-segundos?
    • hora: hour()
    • minutos: minute()
    • segundos: second()
Code
tiempo <- "2022-10-06 07:38:42"
class(tiempo)
[1] "character"
  • ¿Cómo hacer la conversión al tipo POSIXct?
Code
# Esto no funciona porque pierdo horas-minutos-segundos
as.Date(tiempo)
[1] "2022-10-06"
Code
ymd(tiempo)
[1] NA
Code
# Ejecución correctaa
tiempo_bien1 <- ymd_hms(tiempo)
tiempo_bien2 <- as.POSIXct(tiempo)
class(tiempo_bien1)
[1] "POSIXct" "POSIXt" 
Code
class(tiempo_bien2)
[1] "POSIXct" "POSIXt" 
  • ¿Qué pasa si nos dan la fecha en orden diferente (día-mes-año): “28-10-2022” o con texto (día-mes-año): “01-julio-2022”?
Code
fecha_mal1 <- "28-10-2022"
fecha_mal2 <- "01-julio-2022"
class(fecha_mal1)
[1] "character"
  • La biblioteca “lubridate” proporciona funciones intuitivas para trabajar con fechas:
Code
fecha_bien1 <- dmy(fecha_mal1)
class(fecha_bien1)
[1] "Date"
Code
dmy(fecha_mal2)
[1] "2022-07-01"
  • También es posible tener un vector de fechas:
Code
vector_fechas1 <- c("2010-01-01", "2020-01-01", "2030-01-01")
class(vector_fechas1)
[1] "character"
Code
vector_fechas2 <- ymd(vector_fechas1)
class(vector_fechas2)
[1] "Date"

Datos especiales

  • NA: no disponible o ausente (Not Available)
  • NaN: por ejemplo una indeterminación (NOT a NUMBER)
  • Inf o -Inf: infinito y menos infinito
Code
mi_na <- NA
class(mi_na)
[1] "logical"
Code
NA + 1
[1] NA
Code
NA - 1
[1] NA
Code
NA * 1
[1] NA
Code
NA / 1
[1] NA
  • También podemos crear un vector de NA:
Code
vector_na <- c(NA, NA, NA)
length(vector_na)
[1] 3
  • Puedo tener vectores con valores “reales” y valores ausentes:
Code
vector_mixto <- c(1, 12, NA, 24, NA)
class(vector_mixto)
[1] "numeric"
Code
1 + vector_mixto
[1]  2 13 NA 25 NA
Code
# quiero sumar los elementos del vector_mixto
# siempre devuelve NA
sum(vector_mixto)
[1] NA
  • Podemos corregir el “problema” de respuestas en NA agregando el argumento na.rm = TRUE:
Code
sum(vector_mixto, na.rm = TRUE)
[1] 37
  • Infinito, -Infinito y NaN:
Code
-Inf + Inf
[1] NaN
Code
0 / 0
[1] NaN

Tubería %>%

Code
# El operador de tubería está en el tidyverse (magrittr)r)
mi_vector <- c(1, 20, 40, 50)
sum(mi_vector)
[1] 111
Code
mi_vector %>% sum()
[1] 111
Code
mi_vector %>% 
  sum()
[1] 111

Coerción

  • ¿Qué pasa si mezclo en un mismo vector números y texto?
Code
vector_mezclado <- c(12, 21, 24, "12m")
vector_mezclado %>% 
  class()
[1] "character"
Code
vector_mezclado
[1] "12"  "21"  "24"  "12m"
  • Hay dos tipos de coerción:
    • Implícita: es cuando R toma la decisión de manera autónoma. Por ejemplo cuando decide tratar el vector anterior como un “character”
    • Explícita: el usuario ejerce control sobre la coerción o conversión.

characterfactor

  • as.factor() o factor()
Code
orden_carrera <- c("primero", "segundo", "tercero", "primero")
orden_carrera %>% 
  class()
[1] "character"
Code
carrera_factor <- orden_carrera %>% 
  as.factor()
carrera_factor %>% 
  class()
[1] "factor"
Code
carrera_factor
[1] primero segundo tercero primero
Levels: primero segundo tercero

characternumeric

  • as.numeric()
Code
texto_num1 <- "24.5"
texto_num1 %>% 
  class()
[1] "character"
Code
texto_num2 <- texto_num1 %>% 
  as.numeric()

texto_num2 %>% class()
[1] "numeric"
  • ¿Cómo corregir el siguiente problema? ¿Cómo llevar “texto_num3” a numeric?
Code
texto_num3 <- "24,5"
texto_num3 %>% 
  as.numeric()
[1] NA
Code
c("12.8", "14,5") %>% 
  as.numeric() 
[1] 12.8   NA
  • Para solucionar el problema simplemente reemplazaos la coma “,” por el punto “.”, a través de la función str_replace_all()
Code
corregido <- str_replace_all(string = texto_num3,
                             pattern = ",",
                             replacement = ".")
corregido
[1] "24.5"
  • Ahora sí podemos hacer la coerción:
Code
corregido_numero <- corregido %>% 
  as.numeric()

corregido_numero %>% class()
[1] "numeric"

characterdate

  • as.Date()
Code
"2020-10-21" %>% 
  as.Date()  %>% 
  class()
[1] "Date"
  • Vimos anteriormente que podemos usar las funciones de la biblioteca lubridate():
Code
"2020-10-21" %>% 
  ymd() %>% 
  class()
[1] "Date"

characterlogical

  • as.logical()
Code
"TRUE" %>% 
  as.logical() %>% 
  class()
[1] "logical"

Confirmación

is.numeric() o is.double()

Code
[1] TRUE
Code
c(1, 20, 201.5, 40.5) %>% is.numeric()
[1] TRUE

is.integer()

Code
[1] TRUE
Code
[1] FALSE

is.character()

Code
"Hola mundo" %>% is.character()
[1] TRUE

is.factor()

Code
nuevo_factor <- factor(c("lunes", "martes", "miércoles")))
nuevo_factor %>% is.factor()
[1] TRUE

is.logical()

Code
FALSE %>% is.logical()
[1] TRUE

is.na(), is.nan(), is.infinite()

Code
NA %>% is.na()
[1] TRUE
Code
NaN %>% is.nan()
[1] TRUE
Code
NA %>% is.nan()
[1] FALSE
Code
NaN %>% is.na()
[1] TRUE
Code
[1] TRUE
Code
[1] TRUE

Matrices

  • Podemos crear una matriz con la función matrix(): en este caso se hace por filas
Code
mi_matriz1 <- matrix(data = c(10, 20, 30, 40, 50, 60),
                     nrow = 2,
                     ncol = 3,
                     byrow = TRUE)

mi_matriz1
     [,1] [,2] [,3]
[1,]   10   20   30
[2,]   40   50   60
  • Podemos crear una matriz con la función matrix(): en este caso se hace por columnas
Code
mi_matriz2 <- matrix(data = c(10, 20, 30, 40, 50, 60),
                     nrow = 2,
                     ncol = 3,
                     byrow = FALSE)

mi_matriz2
     [,1] [,2] [,3]
[1,]   10   30   50
[2,]   20   40   60
  • Sumar dos matrices:
Code
mi_matriz1 + mi_matriz2
     [,1] [,2] [,3]
[1,]   20   50   80
[2,]   60   90  120
  • Restar dos matrices:
Code
mi_matriz1 - mi_matriz2
     [,1] [,2] [,3]
[1,]    0  -10  -20
[2,]   20   10    0
  • Número de filas:
Code
mi_matriz1 %>% nrow()
[1] 2
Code
mi_matriz2 %>% nrow()
[1] 2
  • Número de columnas:
Code
mi_matriz1 %>% ncol()
[1] 3
Code
mi_matriz2 %>% ncol()
[1] 3
  • Dimensiones (filas y columnas):
Code
mi_matriz1 %>% dim()
[1] 2 3
Code
mi_matriz2 %>% dim()
[1] 2 3
  • Multiplicación de matrices:
Code
matriz3 <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8),
                  nrow = 2,
                  ncol = 4,
                  byrow = TRUE)

matriz4 <- matrix(data = c(10, 20, 30, 40, 50, 60, 70, 80),
                  nrow = 4,
                  ncol = 2,
                  byrow = TRUE)
  • ¿se pueden multiplicar?
Code
matriz3 %>% ncol() == matriz4 %>% nrow()
[1] TRUE
Code
matriz_mult <- matriz3 %*% matriz4
matriz_mult
     [,1] [,2]
[1,]  500  600
[2,] 1140 1400
  • La inversa de una matriz:
Code
matriz_mult %>% solve()
         [,1]     [,2]
[1,]  0.08750 -0.03750
[2,] -0.07125  0.03125
  • Transpuesta de una matriz:
Code
# También aplica para un vectorr
matriz_mult %>% t()
     [,1] [,2]
[1,]  500 1140
[2,]  600 1400
  • Diagonal de una matriz:
Code
matriz_mult %>% diag()
[1]  500 1400
  • Matriz con texto:
Code
matriz_texto <- matrix(data = c("Cali", "Medellín"","Bucaramanga"","Pasto")),
                       nrow = 2,
                       ncol = 2)

matriz_texto %>% class()
[1] "matrix" "array" 
Code
matriz_texto %>% is.character()
[1] TRUE

Listas

  • Creamos las listas con la función list()
Code
lista1 <- list(1, "a", NA, c(20, 30), list("ciudad", "departamento"))
lista1 %>%  class()
[1] "list"
  • Podemos consultar el número de elementos de una lista:
Code
lista1 %>% length()
[1] 5

Base de datos

  • dataframe o tibble

Dataframes internos

  • R trae consigo bases de datos para ejemplos. Para consultar las bases de datos disponibles podemos ejecutar la función data()
Code
iris %>% class()
[1] "data.frame"
Code
Titanic %>% class()
[1] "table"

Dataframes manuales

  • Podemos crear manualmente las bases de datos. Esto se hace a través de vectores.
Code
datos_manuales <- data.frame(
  ciudad = c("Cali", "Bogotá"","Manizales"","Miami")),
  habitantes = c(12, 15, 24, 54),
  colombia = c(TRUE, TRUE, TRUE, FALSE),
  fecha = c("2021-01-01", "2021-01-01", "2021-01-01", NA)
)

datos_manuales
  • Podemos consultar las dimensiones de la base de datos:
Code
datos_manuales %>% dim()
[1] 4 4
  • Podemos consultar los nombres de las columnas:
Code
datos_manuales %>% names()
[1] "ciudad"     "habitantes" "colombia"   "fecha"     
  • ¿Cómo accedemos a una sola variable? múltiples formas
Code
# Una forma
datos_manuales$habitantes
[1] 12 15 24 54
Code
# Otra forma
datos_manuales[["habitantes"]]
[1] 12 15 24 54
Code
# Otra forma
datos_manuales %>% 
  pull(habitantes)
[1] 12 15 24 54
  • ¿Cómo cambiar los nombres a las variables?
Code
datos_manuales %>% names()
[1] "ciudad"     "habitantes" "colombia"   "fecha"     
Code
datos_manuales2 <- datos_manuales %>% 
  set_names(c("var1", "var2", "var3", "var4"))
datos_manuales2

Dataframes importados

Code
encuesta <- read_excel("Encuesta-Respuestas.xlsx")
encuesta
  • ¿Cómo cambiar el nombre de una manera más rápida?
Code
encuesta %>% 
  clean_names()
  • Podemos darle nuestros propios nombres:
Code
mis_nombres <- str_c("pregunta", 1:11)
encuesta2 <- encuesta %>% 
  set_names(mis_nombres)

encuesta2

Secuencias y repeticiones

Code
-10:1
 [1] -10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1
Code
seq(from = 1, to = 10, by = 2)
[1] 1 3 5 7 9
Code
rep("pregunta", 10)
 [1] "pregunta" "pregunta" "pregunta" "pregunta" "pregunta" "pregunta"
 [7] "pregunta" "pregunta" "pregunta" "pregunta"
Code
str_c("pregunta", 1:11)
 [1] "pregunta1"  "pregunta2"  "pregunta3"  "pregunta4"  "pregunta5" 
 [6] "pregunta6"  "pregunta7"  "pregunta8"  "pregunta9"  "pregunta10"
[11] "pregunta11"

Atributos

Code
encuesta2 %>% attributes()
$class
[1] "tbl_df"     "tbl"        "data.frame"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29

$names
 [1] "pregunta1"  "pregunta2"  "pregunta3"  "pregunta4"  "pregunta5" 
 [6] "pregunta6"  "pregunta7"  "pregunta8"  "pregunta9"  "pregunta10"
[11] "pregunta11"

Operadores

Aritméticos

  • Suma: +
  • Resta: -
  • Multiplicación: *
  • División: /

Relacionales

  • Igualdad: ==
  • Diferencia: !=
  • Negación: !
  • Disyunción (o): |
  • Conjunción (y): &

Subconjuntos

Vectores

  • Si tomamos la pregunta 7 de la encuesta:
Code
pregunta7 <- encuesta2$pregunta7
pregunta7
 [1] 5 2 3 5 7 5 7 2 6 5 3 0 3 4 8 1 5 3 9 4 6 2 7 7 7 7 7 4 7
  • ¿cómo obtenemos un subconjunto (vector) de aquellos que eligieron un número mayor a 5?
Code
pregunta7[pregunta7 > 5]
 [1] 7 7 6 8 9 6 7 7 7 7 7 7
  • ¿Cuántos estudiantes eligieron un número al azar mayor a 5?
Code
pregunta7[pregunta7 > 5] %>% 
  length()
[1] 12
  • Si tomamos la pregunta 1, ¿está tipificada de la manera correcta?
Code
encuesta2$pregunta1 %>% 
  class()
[1] "character"
Code
pregunta1 <-
  encuesta2$pregunta1 %>%
  as.numeric()

pregunta1
 [1] 4.44 4.30 4.00 4.10 3.70 4.00 4.00 4.00 3.70 3.90 3.97 4.20 3.70 3.40 3.74
[16] 4.20 4.00 4.10 4.00 3.96 3.70 3.70 4.07 3.35 3.84 3.80 3.60 4.01 3.80
  • ¿Cuántos estudiantes superan el promedio del promedio académico?
Code
# Rta:
promedio <-
  pregunta1 %>% 
  mean()

pregunta1[pregunta1 > promedio] %>% 
  length()
[1] 16
  • Si tomamos la pregunta 4:
Code
pregunta4 <- encuesta2$pregunta4
pregunta4
 [1] "No" "No" "Sí" "Sí" "Sí" "No" "Sí" "No" "Sí" "Sí" "No" "Sí" "No" "No" "Sí"
[16] "Sí" "No" "No" "No" "No" "Sí" "No" "Sí" "Sí" "Sí" "No" "Sí" "No" "No"
  • ¿Cómo obtenemos el subconjunto (vector) de personas que respondieron “Sí”?
Code
# Rta:
pregunta4[pregunta4 == "Sí"]]%>%% 
  length()
[1] 14

Base de datos

Seleccionar columnas

  • ¿Cómo seleccionar sólo las preguntas 10 y 11?
Code
encuesta_p10p11 <-
  encuesta2 %>%
  select(pregunta10, pregunta11)

encuesta_p10p11

Filtrar filas

  • ¿Cómo filtrar una o más filas?
Code
encuesta2 %>% 
  slice(1, 29)
  • ¿Cómo filtrar una o más filas que cumplan con alguna condición?
Code
encuesta2 %>% 
  filter(pregunta4 == "Sí"))
  • ¿Cómo filtrar una o más filas que cumplan con más de una condición?
Code
encuesta2 %>% 
  filter(pregunta4 == "Sí"))%>%% 
  filter(pregunta8 == "Sí"))
  • ¿Cómo filtrar filas de personas que usen motocicleta y transporte público?
Code
encuesta2 %>% 
  filter(pregunta5 %in% c("Transporte público"","Motocicleta")))
  • ¿Cuántos estudiantes se movilizan en algún medio de transporte que no sea a pie?
Code
encuesta2 %>% 
  filter(pregunta5 != "A pie")

Matrices

Code
otra_matriz <- matrix(data = pregunta1,
                      ncol = 10,
                      nrow = 3)

otra_matriz
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 4.44  4.1  4.0 3.90 3.70  4.2 4.00 3.70 3.84  4.01
[2,] 4.30  3.7  4.0 3.97 3.40  4.0 3.96 4.07 3.80  3.80
[3,] 4.00  4.0  3.7 4.20 3.74  4.1 3.70 3.35 3.60  4.44
  • ¿Cómo extraer la fila 2?
Code
otra_matriz[2, ]
 [1] 4.30 3.70 4.00 3.97 3.40 4.00 3.96 4.07 3.80 3.80
  • ¿Cómo extraer la columna 1?
Code
otra_matriz[, 1]
[1] 4.44 4.30 4.00
  • ¿Cómo extraer el elemento que está en la fila 1 y columna 10?
Code
otra_matriz[1, 10]
[1] 4.01
  • ¿Cómo extraer la fila 1 y 3 con las columnas 6 y 10?
Code
# Rta:

Listas

Code
otra_lista <-
  list(
    e1 = 1,
    e2 = 2,
    e3 = "a",
    e4 = c(10, 20, 30),
    e5 = pregunta1
  )
otra_lista
$e1
[1] 1

$e2
[1] 2

$e3
[1] "a"

$e4
[1] 10 20 30

$e5
 [1] 4.44 4.30 4.00 4.10 3.70 4.00 4.00 4.00 3.70 3.90 3.97 4.20 3.70 3.40 3.74
[16] 4.20 4.00 4.10 4.00 3.96 3.70 3.70 4.07 3.35 3.84 3.80 3.60 4.01 3.80
  • ¿Cómo acceder a algún elemento de la lista?
Code
otra_lista$e1
[1] 1
  • El proceso anterior es equivalente a:
Code
otra_lista[1]
$e1
[1] 1
Code
otra_lista[[1]]
[1] 1
  • ¿Cómo acceder a la última respuesta (3.80) de la pregunta 1 que está dentro de la lista anterior?
Code
otra_lista$e5[29]
[1] 3.8
  • El proceso anterior es equivalente a:
Code
otra_lista[[5]][29]
[1] 3.8
Code
otra_lista[["e5"]][29]
[1] 3.8

Análisis de texto

Conteo de palabras p10

Code
library(wordcloud)
library(tidytext)
library(tm)
stop_words_spanish <- data.frame(word = stopwords("spanish"))

conteo_p10 <-
  encuesta_p10p11 %>%
  select(pregunta10) %>%
  unnest_tokens(word, pregunta10) %>%
  anti_join(stop_words_spanish) %>%
  count(word, sort = TRUE)

conteo_p10

Nube de palabras p10

Code
wordcloud(
  words = conteo_p10$word,
  freq = conteo_p10$n,
  max.words = 100,
  random.order = FALSE,
  colors = c("blue", "green")
)