INTRODUCCIÓN


En esta segunda sección, nos proponemos avanzar en el uso de tidyverse como una forma de facilitar la programación en R. En especial sobre dplyr (paquete dentro de tidyverse) es una gramática de manipulación de datos, que proporciona un conjunto consistente de verbos que ayudan a resolver los desafíos más comunes dentro de la transformación de datos. Con estas herramientas en nuestro maletín nos vamos a introducir al mundo de la EPH para calcular la Tasa de Desocupación. Además, presentamos algunas funciones útiles para realizar análisis exploratorio de datos. Antes que nada, conversemos sobre dos temas introductorios, pero bien importantes para manejar datos en R: los tipos de objetos y las formas de acceder a los mismos.


CONTENIDOS



TIPOS DE OBJETOS


1.1. VECTORES


Ya hemos visto en la jornada anterior, aunque sin querer explicitarlo mucho, un contenedor básico: los vectores. Habíamos dicho que los mismos no pueden contener más de un tipo de dato distinto en su interior. Es decir, podemos tener vectores numéricos, de texto o lógicos. Y que la sintaxis para definirlos es con c( ).

notas_alumnes <- c(9, 8, 7, 9, 10)


¿Recuerdan que pasaba si mezclaba tipos de datos distintos cuando estoy definiendo un vector? Por ejemplo:

notas_alumnes <- c('A', TRUE, 7, 'C', 10)

1.2. MATRICES


Otro tipo de objeto son las matrices, no vamos a profundizar en ellas. De todas formas, si es importante que por sepan que existen, ya que muchas veces cuando obtenemos un resultado de alguna función en R, el tipo de objeto que nos devuelve R es una Matriz.:

# Creamos una matriz de 3x3 con numeros del 1 al 9
mi_matriz <- matrix(1:9, nrow = 3, ncol = 3, byrow = TRUE) 

#Le pregunto al R si el objeto que defini es una matriz
is.matrix(mi_matriz)
## [1] TRUE

1.3. DATAFRAMES


Como una combinación de vectores y matrices, tenemos los dataframes. Este sí, es el tipo de objeto que es más común para nosotres, nos recuerda mucho a las tablas en Excel, Spss o Stata. Es muy importante considerar que en general nuestros datos contienen OBSERVACIONES (o casos) en las FILAS y VARIABLES (o características de esas observaciones) en las COLUMNAS. Cada columna será una característica distinta de esa UNIDAD DE ANÁLISIS. Otro elemento a destacar es que, en un Data Frame cada columna es un vector y puede ser tratada como tal. Vamos a definir una tabla básica con las características de nuestros alumnes.

# Tenemos las notas de 5 estudiantes
notas_alumnes <- c(9, 8, 7, 9, 10)

#Ahora escribimos los nombre
# El orden de los nombres tiene que corresponder a sus notas
nombre_alumnes <- c('Maria', 'Juana', 'Pedro', 'Mariana', 'Inti')

#Ahora definimos una nota de concepto
concepto_alumnes <- c('Muy bueno', 'Bueno', 'Muy bueno', 'Regular', 'Bueno')

#Hagamos una tabla con toda la información
curso <- data.frame(nombres = nombre_alumnes,
                    notas = notas_alumnes,
                    concepto= concepto_alumnes)
curso
##   nombres notas  concepto
## 1   Maria     9 Muy bueno
## 2   Juana     8     Bueno
## 3   Pedro     7 Muy bueno
## 4 Mariana     9   Regular
## 5    Inti    10     Bueno

1.4. LISTAS


Por último, hay un tipo especial de objetos, que se llama lista. La particularidad es que pueden contener cualquier tipo de objetos e incluso. Por ejemplo, puede tener un data frame o varios, a la vez que contiene otro vector u otra lista. Parece un poco rebuscado (al principio lo es) pero paso a paso diría Mostaza. Veamos un ejemplo:

# Voy a poner todo lo que tengo en una lista
mi_lista <- list(tabla= curso, 
                 matriz= mi_matriz, 
                 mi_nombre= 'Leandro', mi_edad=25)
mi_lista
## $tabla
##   nombres notas  concepto
## 1   Maria     9 Muy bueno
## 2   Juana     8     Bueno
## 3   Pedro     7 Muy bueno
## 4 Mariana     9   Regular
## 5    Inti    10     Bueno
## 
## $matriz
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
## 
## $mi_nombre
## [1] "Leandro"
## 
## $mi_edad
## [1] 25


Las listas pueden ser muy útiles para guardar, por ejemplo, múltiples tablas. También es bueno conocerlas, porque suelen ser el contenedor de resultados como gráficos o modelos estadísticos.


1.5. MODIFICANDO OBJETOS


Todos los objetos que hemos visto, además de lo que contienen adentro, tienen otros atributos, como ser la clase (que vimos en la jornada anterior), los nombres, el largo, etc. Un atributo muy importante es el índice. El cual nos sirve para acceder a un elemento específico de nuestro objeto. Veamos de manera resumida algunos ejemplos. Los vectores son objetos que tienen una sola dimensión. Por lo cual a ellos podemos acceder con el número de posición del elemento o cuando cumplen una condición lógica, es decir que se quede con los elementos que cumplen determinada condición.


#Volvemos a los alumnes
notas_alumnes <- c(9, 8, 7, 9, 10)

#El indice en R comienza en 1
notas_alumnes[3]
## [1] 7
# Notas menores a 8
notas_alumnes[notas_alumnes < 8]
## [1] 7


Para los objetos que tienen dos dimensiones como las matrices y los data frames, la dinámica es la misma sólo que tenemos que agregar las columnas de referencia. Además, es bueno mencionar que, si queremos acceder a una columna y tratarla como si fuera un vector, podemos acceder a ella escribiendo nombre_tabla$nombre_columna.

# Me quedo con el primer registro de la primer columna
curso[ 1, 1]
## [1] "Maria"
# Segunda fila todos los registros
curso[ 2, ]
##   nombres notas concepto
## 2   Juana     8    Bueno
#Todos los que tienen mayor o igual que 9 en nota
curso[ curso$notas >= 9, ]
##   nombres notas  concepto
## 1   Maria     9 Muy bueno
## 4 Mariana     9   Regular
## 5    Inti    10     Bueno

CARGA DE DATOS



A continuación, revisamos las funciones que usamos para cargar en nuestro ambiente de trabajo los diferentes tipos de extensiones. Además, les explicamos que especificando el encoding (es decir la codificación del texto que interpreta la pc) pueden evitar que les aparezcan símbolos extraños (por ejemplo cuando en vez de la á aparece Ã). Esto último es clave para todas las tareas que vayamos a realizar con los datos. Pero previo a sumergirnos, queremos aclarar que podemos cargar los archivos csv de tres maneras distintas:


- Con la ruta local del archivo (es decir la ubicación del archivo dentro de mi pc desde el disco duro c en adelante). Esto es lo mismo, que abrir en word la opción archivo y abrir para buscar un documento en las carpetas de sus pc. La única diferencia es que en vez de hacer clic en botones tienen que escribir la ruta. Para probar las diferentes formas de cargar, les dejemos una carpeta con los archivos necesarios acá.


# Cargar un archivo que está en la carpeta de descargas (recuerden cambiar el nombre de las carpetas)
forma1 <- read.csv("C:/Users/flavi/Downloads/encc_2017.csv", encoding = "UTF-8")


- Seteando y accediendo a las carpetas/archivos a través del directorio. Para esto primero, definen la carpeta que van a utilizar como directorio de trabajo. Para luego, guardar en ella todos los archivos que necesitan.

# Seteo mi carpeta de descarga como directorio (Recuerden actualiza de acuerdo a las carpetas en sus computadoras)
setwd("C:/Users/flavi/Downloads/")

# Cargo la base en el ambiente de trabajo
forma2 <- read.csv("encc_2017.csv", encoding = "UTF-8")


- Con el link de internet (pero recuerden que pueden dar de bajo el archivo. Por esto, la opción local es más segura pero menos inmediata)

# Cargo 
forma3 <- read.csv("https://datos.cultura.gob.ar/dataset/251c2ac2-e670-451c-9dbf-a4212af225b5/resource/171494ce-e3cf-43fb-ad6e-f204bae1bb19/download/encc_2017.csv", encoding = "UTF-8")

Ahora veamos cómo cargar los diferentes extensiones de los archivos:

csv/.txt


Como ya saben, r nos permite de distinta forma alcanzar un mismo objetivo. A continuación presentamos, las funciones más comunes para cargar un csv/txt. Algunas vienen por default en r (como parte de rbase, utils, etc.), en otras es necesario activar un paquete.
Dentro de las funciones que viene por default en r se encuentran: - read.delim() [se puede especificar delimitador] - read.csv() [delimitador “,”] - read.csv2() [delimitador “;”]

# Vector con el link de descarga 
link <- "https://datos.cultura.gob.ar/dataset/251c2ac2-e670-451c-9dbf-a4212af225b5/resource/171494ce-e3cf-43fb-ad6e-f204bae1bb19/download/encc_2017.csv"

# Prueba de lectura (no creamos objetos porque es sólo una prueba de cómo funcionan)
read.delim(link,sep = ",", encoding = "UTF-8")

# Podemos usar read.csv porque el delimitador es una coma (,). ¿Por qué no se puede usar read.csv2? Porque es para los archivos separados por punto y coma (;)
read.csv(link, encoding = "UTF-8")


Hay una función que tiene como beneficio la posibilidad de cargar la tabla únicamente con las variables que son de interés para nosotres. Este es muy bueno, para cuando tenemos tablas muy grandes y nuestras pc no cumplen con los requerimientos de memorias necesarios para cargar todos los datos. Además, tiene una muy buena performance en la lectura del archivo. La función se llama fread y se encuentra en el paquete data.table.
fread()[se puede especificar delimitador]

# Activo el paquete data.table
library(data.table)

# Creamos vectores para seleccionar únicamente las variables que nos interesan. 
variables <- c("id", "pondera_dem", "fecha", "region", "sexo", "edad", "p1"," p1otros",
         "p2", "p3", "p4", "p5", "p6horas", "p6minutos")

# Cargamos la tabla únicamente con las variables selecionadas
fread(link, select = variables, sep = ",", encoding = "UTF-8")

Dentro del paquete readr de la familia tidyverse encontramos:

read_csv() [delimitador “,”] read_csv2() [delimitador “,”]

# Cargo la biblioteca
library(tidyverse)

# Prueba de lectura (no creamos objetos porque es sólo una prueba de cómo funcionan)
read_csv(link,,locale = locale(encoding = "UTF-8") )

# Podemos usar read_csv porque el delimitador es una coma (,). ¿Por qué no se puede usar read_csv2? Porque es para los archivos separados por punto y coma (;)
Las planillas de Excel son quizás el formato más común que nos encontremos, por eso es bueno conocer la función de lectura básica. ¡Para eso cargamos la librería readxl y aplicamos la función léeme el excel y listo! read_excel()

.xlsx


# Cargo la biblioteca
library(readxl)

# Cargo el archivo desde mi directorio de trabajo (recuerden cambiar el nombre de las carpetas)
archivo_excel <- read_excel("CuadroDeuda.xlsx")

La librería haven permite leer archivos de varios orígenes como SPSS, Stata y SAS.


.sav, .dta, .sas

# Cargo la biblioteca
library(haven)

# Cargo el archivo SPSS
archivo_spss <- read_sav("datos/LOWBWT.sav",encoding = "UTF-8")

# Cargo el achivo de stata
archivo_stata <- read_dta("datos/LOWBWT.dta",encoding = "UTF-8")

# Cargo el archivo de archivo sas
archivo_sas <- read_sas("datos/LOWBWT.sas7bdat",encoding = "UTF-8")


Resumen de las principales funciones

Función Paquete Extensión Encoding
read_delim utils (default) .csv/.txt [Especificar delimitador] encoding = “UTF-8”
read.csv utils (default) .csv/.txt [Delimitador “,”] encoding = “UTF-8”
read.csv2 utils (default) .csv/.txt [Delimitador “;”] encoding = “UTF-8”
read_csv readr .csv/.txt [Delimitador “,”] locale(encoding = “UTF-8”)
read_csv2 readr .csv/.txt [Delimitador “;”] locale(encoding = “UTF-8”)
fread data.table .csv/.txt [Especificar delimitador] encoding = ‘UTF-8’
read_excel readxl .xlsx -
read_sav haven .sas7bdat encoding = ‘UTF-8’
read_dta haven .dta encoding = ‘UTF-8’
read_sas haven .sas encoding = ‘UTF-8’


Cómo ven se puede leer cualquier archivo de una forma simple y con una sintaxis amigable. En todos los casos vimos que el único parámetro obligatorio fue la dirección del archivo. Lo bueno de R, es que cuando cargamos una tabla. Las transformaciones no las hacemos sobre el archivo original, sino que las hacemos sobre el objeto de R. Por eso no nos tenemos que preocupar por mandarnos un lío y guardar. Está todo escrito y uno lo ejecuta cuando quiere.


“Se puede leer cualquier archivo de una forma simple y con una sintaxis amigable.”


Ahora, si queremos guardar una tabla transformada, también lo podemos hacer de una forma muy sencilla, en vez de decirle a R lee, le vamos a decir escribí. Como en este ejemplo:

write.csv(x = archivo_excel, file = "resultados/CuadroDeuda.csv")


Cuando guardamos un archivo tenemos dos parámetros obligatorios. El primero le dice a R que va a guardar y el segundo dónde, con qué nombre y que extensión va a tener.

Con esto es más que suficiente para que comiencen a leer sus datos. No obstante, sepan que con R nos podemos conectar a bases de datos como SQLServer, SQLite, PostgresSQL y más. Hay conexiones de todo tipo y color.


TRANSFORMACIÓN DE DATOS


3.1. TIDYVERSE


Tidyverse es una colección de paquetes de código abierto que fue creada por Hadley Wickham que hoy en día funciona como un paradigma de programación en R. Esto es así porque el conjunto de bibliotecas, veremos algunas funciones de algunos de ellos, permiten hacer de forma simplificada y más legible muchas de las cosas que podemos hacer con R base. Si utilizan R lo más probable es que la primera biblioteca que activen será tidyverse. Sin ir más lejos ya la hemos usado en múltiples ocasiones. Son parte de tidyverse ggplot. dplyr, tidyr, haven, stringr, lubridate, forecast, tidymodel y más.


“Tidyverse es una colección de paquetes de código abierto que fue creada por Hadley Wickham que hoy en día funciona como un paradigma de programación en R.”




# Activamos la libreria
library(tidyverse)

3.2. DPLYR


Pasemos a ver cómo se realizan algunas de estas acciones con el concepto de **dplyr¨¨. A modo de simplificación, son seis las principales funciones a utilizar: filter, mutate, select, arrange, group_by y summarise. Sus nombres son verbos que nos indican que es lo que vamos a hacer: manipular datos. Antes de pasar a la EPH, vamos a traer un set de datos de la Encuesta Nacional de Consumos Culturales, que descargamos desde aquí. Vamos a cargar el Set de datos y aplicar las funciones de Tidyverse sobre el mismo.


“Son seis las principales funciones a utilizar: filter, mutate, select, arrange, group_by y summarise.


rm(list = ls()) #limpiamos el ambiente de trabajo

# Cargamos los datos de la encuesta
encuesta_cc <- read_csv("https://datos.cultura.gob.ar/dataset/251c2ac2-e670-451c-9dbf-a4212af225b5/resource/171494ce-e3cf-43fb-ad6e-f204bae1bb19/download/encc_2017.csv") %>% 
  as.data.frame() #Cargar tabla 

encuesta_cc #Imprimo la tabla
##   id pondera_dem     fecha
## 1  1        8608 23/5/2017
## 2  2        2869 10/5/2017
##   region  sexo edad
## 1 CENTRO Varón   19
## 2 CENTRO Varón   24
##                                       p1
## 1 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
## 2                      EL ARTE, LO CULTO
##   p1otros p2 p2_1 p2_1otro
## 1    <NA> SI <NA>     <NA>
## 2    <NA> SI <NA>     <NA>
##   p2_2 p3
## 1 <NA> SI
## 2 <NA> NO
##                        p4 p5
## 1    ALGUNAS VECES AL MES FM
## 2 ALGUNOS DIAS POR SEMANA FM
##   p6horas p6minutos
## 1       1         0
## 2       1         0
##   horas_radio minutos_radio
## 1           1             0
## 2           1             0
##                      p7_1
## 1    ALGUNAS VECES AL MES
## 2 ALGUNOS DIAS POR SEMANA
##                      p7_2
## 1                   NUNCA
## 2 ALGUNOS DIAS POR SEMANA
##    p7_3
## 1 NUNCA
## 2 NUNCA
##                      p7_4
## 1    ALGUNAS VECES AL MES
## 2 ALGUNOS DIAS POR SEMANA
##    p7_5
## 1 NUNCA
## 2 NUNCA
##                         p8a
## 1                 MUSICALES
## 2 INFORMATIVOS / NOTICIEROS
##                     p8b
## 1 ACTUALIDAD / MAGAZINE
## 2             MUSICALES
##          p8c  p8d  p8e  p8f
## 1       <NA> <NA> <NA> <NA>
## 2 CULTURALES <NA> <NA> <NA>
##    p8g p8otros p9 p10 p10_1
## 1 <NA>    <NA>  1  SI  <NA>
## 2 <NA>    <NA>  0  SI  <NA>
##   p10_1otr p10_2
## 1       NA  <NA>
## 2       NA  <NA>
##                           p11
## 1     ALGUNOS DIAS POR SEMANA
## 2 TODOS O CASI TODOS LOS DIAS
##   p12horas p12minutos
## 1        1         30
## 2        3          0
##   horas_musica minutos_musica
## 1            1             30
## 2            3              0
##   p13_1
## 1 NUNCA
## 2 NUNCA
##                     p13_2
## 1    ALGUNAS VECES AL MES
## 2 ALGUNOS DIAS POR SEMANA
##                         p13_3
## 1        ALGUNAS VECES AL MES
## 2 TODOS O CASI TODOS LOS DIAS
##                     p13_4
## 1 ALGUNOS DIAS POR SEMANA
## 2 ALGUNA VEZ CADA 3 MESES
##   p13_5 p13_6 p13_7 p13_8
## 1 NUNCA NUNCA NUNCA NUNCA
## 2 NUNCA NUNCA NUNCA NUNCA
##                     p13_9
## 1 ALGUNOS DIAS POR SEMANA
## 2                   NUNCA
##           p14_1      p14_2
## 1         NUNCA      NUNCA
## 2 HABITUALMENTE CASI NUNCA
##           p14_3 p14_4 p14_5
## 1 HABITUALMENTE NUNCA NUNCA
## 2 HABITUALMENTE NUNCA NUNCA
##              p14_6
## 1 DE VEZ EN CUANDO
## 2 DE VEZ EN CUANDO
##              p14_7      p14_8
## 1 DE VEZ EN CUANDO      NUNCA
## 2 DE VEZ EN CUANDO CASI NUNCA
##        p14_9 p14_10
## 1      NUNCA  NUNCA
## 2 CASI NUNCA  NUNCA
##             p14_11
## 1 DE VEZ EN CUANDO
## 2 DE VEZ EN CUANDO
##             p14_12 p14_13
## 1 DE VEZ EN CUANDO  NUNCA
## 2            NUNCA  NUNCA
##   p14_14         p15 p16
## 1  NUNCA 6 canciones  SI
## 2  NUNCA 9 canciones  SI
##                         p17_1
## 1     ALGUNOS DIAS POR SEMANA
## 2 TODOS O CASI TODOS LOS DIAS
##                       p17_2
## 1 ALGUNA VEZ AL AÑO O MENOS
## 2   ALGUNOS DIAS POR SEMANA
##          p18a    p18b p18c
## 1     YOUTUBE    <NA> <NA>
## 2 GOOGLE PLAY YOUTUBE <NA>
##   p18d p18e p18f p18g
## 1 <NA> <NA> <NA>   NA
## 2 <NA> <NA> <NA>   NA
##   p18otros p19 p20 p21 p22
## 1     <NA>   0   0   0   0
## 2     <NA> 150   0   0   0
##   p23
## 1  NO
## 2  SI
##                             p23_1
## 1 PORQUE LAS ENTRADAS ESTAN CARAS
## 2                            <NA>
##   p23_1otr p23_2
## 1     <NA>    SI
## 2     <NA>  <NA>
##                              p24
## 1                           <NA>
## 2 TODAS O CASI TODAS LAS SEMANAS
##    p25 p25_bis p25_1
## 1 <NA>       0  <NA>
## 2   13      13    13
##   p25_1_bis  p26 p26_bis p27
## 1         0 <NA>       0  NO
## 2        13  500     500  SI
##   p27_1 p28 p29 p29_1
## 1     0  NO  SI  <NA>
## 2     2  SI  SI  <NA>
##   p29_1otr p29_2 p30 p30_bis
## 1     <NA>  <NA>   3       3
## 2     <NA>  <NA>   6       6
##   p31horas p31minutos
## 1        1          0
## 2        0         30
##   horas_diario minutos_diario
## 1            1              0
## 2            0             30
##                    p32 p33
## 1 ALGUNAS VECES AL MES   0
## 2    ALGUNA VEZ AL AÑO   0
##   p33_bis p33_1 p33_1_bis
## 1       0     0         0
## 2       0     0         0
##                           p34
## 1 TODOS O CASI TODOS LOS DIAS
## 2 TODOS O CASI TODOS LOS DIAS
##     p34_1
## 1 CELULAR
## 2 CELULAR
##                      p35_1
## 1 MENOS DE UNA VEZ POR MES
## 2                    NUNCA
##   p35_2
## 1 NUNCA
## 2 NUNCA
##                         p35_3
## 1 TODOS O CASI TODOS LOS DIAS
## 2 TODOS O CASI TODOS LOS DIAS
##               p36 p37 p37_1
## 1 AMBAS POR IGUAL  NO    NO
## 2 AMBAS POR IGUAL  SI  <NA>
##                       p38
## 1                    <NA>
## 2 ALGUNOS DIAS POR SEMANA
##    p39 p39_bis p39_1
## 1 <NA>       0  <NA>
## 2    0       0     0
##   p39_1_bis  p40 p40_bis
## 1         0 <NA>       0
## 2         0    0       0
##                           p41
## 1                        <NA>
## 2 TODOS O CASI TODOS LOS DIAS
##   p42 p42_1 p42_1otr p42_2
## 1  SI  <NA>     <NA>  <NA>
## 2  SI  <NA>     <NA>  <NA>
##   p43 p43_bis p43_1 p43_1_bis
## 1   1       1     0         0
## 2   3       3     2         2
##                                                                               p44
## 1 SE LO HABIA RECOMENDADO UN PROFESOR, REFERENTE POLITICO, RELIGIOSO O ESPIRITUAL
## 2                                                        PORQUE ESTABA EN SU CASA
##   p44otros p45 p45_bis p45_1
## 1     <NA>   1       1   600
## 2     <NA>   0       0     0
##   p45_1_bis
## 1       600
## 2         0
##                       p46
## 1    ALGUNAS VECES AL MES
## 2 ALGUNA VEZ CADA 3 MESES
##                                         p47
## 1 NO LEYO LIBROS EN PANTALLA, SOLO EN PAPEL
## 2                   ALGUNA VEZ CADA 3 MESES
##        p47_1a p47_1b p47_1c
## 1        <NA>   <NA>   <NA>
## 2 COMPUTADORA   <NA>   <NA>
##   p47_1d p47_2      p48_1
## 1     NA  <NA> CASI NUNCA
## 2     NA    NO CASI NUNCA
##        p48_2 p48_3
## 1      NUNCA NUNCA
## 2 CASI NUNCA NUNCA
##              p48_4
## 1            NUNCA
## 2 DE VEZ EN CUANDO
##           p48_5 p48_6 p48_7
## 1 HABITUALMENTE NUNCA NUNCA
## 2         NUNCA NUNCA NUNCA
##              p48_8 p48_9
## 1            NUNCA NUNCA
## 2 DE VEZ EN CUANDO NUNCA
##   p48_10 p48_11
## 1  NUNCA  NUNCA
## 2  NUNCA  NUNCA
##             p48_12
## 1 DE VEZ EN CUANDO
## 2       CASI NUNCA
##          p48_13 p48_14
## 1 HABITUALMENTE  NUNCA
## 2         NUNCA  NUNCA
##       p48_15 p48_16 p49 p49_1
## 1      NUNCA  NUNCA  SI  <NA>
## 2 CASI NUNCA  NUNCA  SI  <NA>
##   p49_2 p50horas p50minutos
## 1  <NA>        1          0
## 2  <NA>        0         45
##   horas_TV minutos_TV
## 1        1          0
## 2        0         45
##                                                          p51a
## 1                                        TELEVISION POR CABLE
## 2 TELEVISION DIGITAL ABIERTA, CON DECODIFICADOR/ SINTONIZADOR
##   p51b
## 1 <NA>
## 2 <NA>
##                        p52
## 1                  NO MIRA
## 2 ALGUNAS VECES POR SEMANA
##                       p53
## 1 UNA HORA O MENOS AL DIA
## 2                 NO MIRA
##   p54_1 p54_2 p54_3
## 1 NUNCA NUNCA NUNCA
## 2 NUNCA NUNCA NUNCA
##                         p54_4
## 1 TODOS O CASI TODOS LOS DIAS
## 2     ALGUNOS DIAS POR SEMANA
##              p55_1 p55_2
## 1            NUNCA NUNCA
## 2 DE VEZ EN CUANDO NUNCA
##        p55_3 p56   p56_1
## 1      NUNCA   2       1
## 2 CASI NUNCA   1 NINGUNO
##   p56_1_bis p57 p57_1
## 1         1  SI  <NA>
## 2   NINGUNO  SI  <NA>
##   p57_1otr p57_2 p58_1
## 1       NA  <NA> NUNCA
## 2       NA  <NA> NUNCA
##                         p58_2
## 1        ALGUNAS VECES AL MES
## 2 TODOS O CASI TODOS LOS DIAS
##                     p58_3
## 1    ALGUNAS VECES AL MES
## 2 ALGUNOS DIAS POR SEMANA
##   p58_4             p58_5
## 1 NUNCA             NUNCA
## 2 NUNCA ALGUNA VEZ AL AÑO
##                     p58_6
## 1 ALGUNOS DIAS POR SEMANA
## 2 ALGUNOS DIAS POR SEMANA
##                         p58_7
## 1 TODOS O CASI TODOS LOS DIAS
## 2     ALGUNOS DIAS POR SEMANA
##               p59_1
## 1 ALGUNA VEZ AL AÑO
## 2             NUNCA
##               p59_2
## 1 ALGUNA VEZ AL AÑO
## 2             NUNCA
##                         p59_3
## 1 TODOS O CASI TODOS LOS DIAS
## 2     ALGUNOS DIAS POR SEMANA
##   p59_4
## 1 NUNCA
## 2 NUNCA
##                     p59_5
## 1       ALGUNA VEZ AL AÑO
## 2 ALGUNOS DIAS POR SEMANA
##                     p59_6
## 1                   NUNCA
## 2 ALGUNA VEZ CADA 3 MESES
##    p60 p61 p62 p63 p63_1
## 1  150   0   0  SI  <NA>
## 2 1350   0   0  SI  <NA>
##   p63_1otr p63_2
## 1     <NA>  <NA>
## 2     <NA>  <NA>
##                         p64
## 1 ALGUNA VEZ AL AÑO O MENOS
## 2   ALGUNA VEZ CADA 3 MESES
##   p65 p65_bis p65_1 p65_1_bis
## 1   1       1     0         0
## 2   3       3     2         2
##                                                     p66
## 1 NO TENIA DECIDIDO IR A VERLA, LA ELIGIO EN EL MOMENTO
## 2 NO TENIA DECIDIDO IR A VERLA, LA ELIGIO EN EL MOMENTO
##   p66otros            p67_1
## 1     <NA> DE VEZ EN CUANDO
## 2     <NA>       CASI NUNCA
##   p67_2      p67_3
## 1 NUNCA      NUNCA
## 2 NUNCA CASI NUNCA
##              p67_4 p67_5
## 1 DE VEZ EN CUANDO NUNCA
## 2 DE VEZ EN CUANDO NUNCA
##              p67_6
## 1    HABITUALMENTE
## 2 DE VEZ EN CUANDO
##           p67_7      p67_8
## 1         NUNCA      NUNCA
## 2 HABITUALMENTE CASI NUNCA
##           p67_9 p67_10
## 1         NUNCA  NUNCA
## 2 HABITUALMENTE  NUNCA
##       p67_11 p68
## 1      NUNCA  NO
## 2 CASI NUNCA  SI
##                       p69
## 1                    <NA>
## 2 ALGUNA VEZ CADA 3 MESES
##    p70 p70_bis p70_1
## 1 <NA>       0  <NA>
## 2    2       2     2
##   p70_1_bis  p71 p71_bis p72
## 1         0 <NA>       0  SI
## 2         2  500     500  SI
##   p72_1 p72_1otr p72_2  p73
## 1  <NA>     <NA>  <NA> <NA>
## 2  <NA>     <NA>  <NA> <NA>
##   p74 p74_1 p74_2 p74_3 p74_4
## 1  SI  <NA>  <NA> NS/NC NS/NC
## 2  NO    NO  <NA>  <NA>  <NA>
##   p74_4_bis
## 1     NS/NC
## 2         0
##                  p75_1
## 1 ALGUNAS VECES AL MES
## 2 ALGUNAS VECES AL MES
##                         p75_2
## 1 TODOS O CASI TODOS LOS DÍAS
## 2 TODOS O CASI TODOS LOS DÍAS
##   p75_3
## 1 NUNCA
## 2 NUNCA
##                     p75_4
## 1 ALGUNOS DIAS POR SEMANA
## 2                   NUNCA
##   p76horas p76minutos
## 1        8     NO USA
## 2        2     NO USA
##   horas_internet
## 1              8
## 2              2
##   minutos_internet
## 1           NO USA
## 2           NO USA
##                         p77_1
## 1 TODOS O CASI TODOS LOS DÍAS
## 2                       NUNCA
##                         p77_2
## 1 TODOS O CASI TODOS LOS DÍAS
## 2 TODOS O CASI TODOS LOS DÍAS
##                  p77_3
## 1 ALGUNAS VECES AL MES
## 2                NUNCA
##                       p77_4
## 1      ALGUNAS VECES AL MES
## 2 ALGUNA VEZ AL AÑO O MENOS
##                       p77_5
## 1      ALGUNAS VECES AL MES
## 2 ALGUNA VEZ AL AÑO O MENOS
##   p77_6 p77_7
## 1 NUNCA NUNCA
## 2 NUNCA NUNCA
##                         p77_8
## 1                       NUNCA
## 2 TODOS O CASI TODOS LOS DÍAS
##                  p77_9
## 1                NUNCA
## 2 ALGUNAS VECES AL MES
##                      p77_10
## 1      ALGUNAS VECES AL MES
## 2 ALGUNA VEZ AL AÑO O MENOS
##   p78_1 p78_2 p78_3 p78_4
## 1    SI    SI    SI    NO
## 2    SI    NO    SI    NO
##   p78_5
## 1    NO
## 2    NO
##                       p78_1_1
## 1 TODOS O CASI TODOS LOS DÍAS
## 2 TODOS O CASI TODOS LOS DÍAS
##                       p78_1_2
## 1 TODOS O CASI TODOS LOS DÍAS
## 2                        <NA>
##                       p78_1_3
## 1 TODOS O CASI TODOS LOS DÍAS
## 2                       NUNCA
##   p78_1_4 p78_1_5 p78_2b
## 1    <NA>    <NA>     NO
## 2    <NA>    <NA>     NO
##   p78_3b_1 p78_3b
## 1     <NA>     NA
## 2     <NA>     NA
##                     p79_1
## 1                   NUNCA
## 2 ALGUNA VEZ CADA 3 MESES
##                       p79_2
## 1 ALGUNA VEZ AL AÑO O MENOS
## 2      ALGUNAS VECES AL MES
##                       p79_3
## 1 ALGUNA VEZ AL AÑO O MENOS
## 2   ALGUNA VEZ CADA 3 MESES
##   p79_4 p79_5
## 1 NUNCA NUNCA
## 2 NUNCA NUNCA
##                     p79_6
## 1    ALGUNAS VECES AL MES
## 2 ALGUNA VEZ CADA 3 MESES
##                  p79_7
## 1 ALGUNAS VECES AL MES
## 2 ALGUNAS VECES AL MES
##   p80horas p80minutos
## 1        4          0
## 2        1          0
##   horas_redes minutos_redes
## 1           4             0
## 2           1             0
##                                                          p81
## 1 COMENTA, COMPARTE, PARTICIPA Y/U OPINA FRENTE A CONTENIDOS
## 2              OBSERVA LOS CONTENIDOS, SIN HACER COMENTARIOS
##   p81_1a p81_1b p81_1c p81_1d
## 1   <NA>   <NA>   <NA>   <NA>
## 2   <NA>   <NA>   <NA>   <NA>
##   p81_1e p81_1f p81_1g p81_1h
## 1   <NA>   <NA>   <NA>   <NA>
## 2   <NA>   <NA>   <NA>   <NA>
##   p81_1i p81_1j p81_1k p81_1l
## 1     NA     NA     NA     NA
## 2     NA     NA     NA     NA
##   p82     p83 p84 p85 p85_1
## 1   1       1  SI   1    SI
## 2   1 NINGUNA  NO   1    SI
##   p85_2 p85_3 p85_3_bis p86
## 1    SI   400       400   0
## 2    NO   145       145   0
##   p87                     p88
## 1  SI ALGUNOS DIAS POR SEMANA
## 2  NO                    <NA>
##   p89horas p89minutos
## 1        1          0
## 2       NA         NA
##   horas_videojuegos
## 1                 1
## 2                 0
##   minutos_videojuegos p90_1
## 1                   0 NUNCA
## 2                   0  <NA>
##                         p90_2
## 1 TODOS O CASI TODOS LOS DIAS
## 2                        <NA>
##   p90_3 p90_4  p91 p91_bis
## 1 NUNCA NUNCA    0       0
## 2  <NA>  <NA> <NA>       0
##   p92_1 p92_2 p92_3 p92_4
## 1    NO    NO    NO    NO
## 2    NO    NO    NO    NO
##   p92_5 p92_6 p92_7 p92_8
## 1    NO    NO    NO    NO
## 2    NO    NO    NO    NO
##   p92_9 p93_1 p93_2 p93_3
## 1    NO  <NA>  <NA>  <NA>
## 2    NO  <NA>  <NA>  <NA>
##   p93_4 p94_1 p94_2 p94_3
## 1  <NA>  <NA>  <NA>  <NA>
## 2  <NA>  <NA>  <NA>  <NA>
##   p94_4 p94_5 p94_6 p95 p96_1
## 1  <NA>  <NA>  <NA>  SI    NO
## 2  <NA>  <NA>  <NA>  SI    NO
##   p96_2 p96_3 p96_4 p96_5
## 1    NO    NO    NO    NO
## 2    NO    NO    NO    NO
##    p97 p97_bis p98 p99
## 1 <NA>       0  SI   1
## 2 <NA>       0  SI   2
##   p99_bis         p100_1
## 1       1 UNA VEZ AL AÑO
## 2       2          NUNCA
##           p100_2
## 1          NUNCA
## 2 UNA VEZ AL AÑO
##           p100_3 p100_4
## 1          NUNCA  NUNCA
## 2 UNA VEZ AL AÑO  NUNCA
##   p100_5 p100_6         p101
## 1  NUNCA  NUNCA FUE GRATUITO
## 2  NUNCA  NUNCA FUE GRATUITO
##   p102 p102_bis
## 1    0        0
## 2    0        0
##                          p103_1
## 1            HACE MAS DE 5 AÑOS
## 2 VARIAS VECES EN EL ULTIMO AÑO
##   p103_1_1           p103_2
## 1     <NA>     NO FUE NUNCA
## 2     1000 ENTRE 1 Y 5 AÑOS
##   p103_1_2
## 1     <NA>
## 2     <NA>
##                   p103_3
## 1     HACE MAS DE 5 AÑOS
## 2 1 VEZ EN EL ULTIMO AÑO
##   p103_1_3
## 1     <NA>
## 2      400
##                          p103_4
## 1 VARIAS VECES EN EL ULTIMO AÑO
## 2 VARIAS VECES EN EL ULTIMO AÑO
##   p103_1_4       p103_5
## 1      300 NO FUE NUNCA
## 2      300 NO FUE NUNCA
##   p103_1_5           p103_6
## 1     <NA> ENTRE 1 Y 5 AÑOS
## 2     <NA> ENTRE 1 Y 5 AÑOS
##   p103_1_6
## 1     <NA>
## 2     <NA>
##                   p103_7
## 1           NO FUE NUNCA
## 2 1 VEZ EN EL ULTIMO AÑO
##   p103_1_7
## 1     <NA>
## 2        0
##                          p103_8
## 1                  NO FUE NUNCA
## 2 VARIAS VECES EN EL ULTIMO AÑO
##   p103_1_8
## 1     <NA>
## 2        0
##                   p103_9
## 1           NO FUE NUNCA
## 2 1 VEZ EN EL ULTIMO AÑO
##   p103_1_9
## 1     <NA>
## 2      100
##                  p103_10
## 1 1 VEZ EN EL ULTIMO AÑO
## 2 1 VEZ EN EL ULTIMO AÑO
##   p103_110      p103_11
## 1       50 NO FUE NUNCA
## 2      600 NO FUE NUNCA
##   p103_111      p103_12
## 1     <NA> NO FUE NUNCA
## 2     <NA> NO FUE NUNCA
##   p103_112
## 1     <NA>
## 2     <NA>
##                  p103_13
## 1           NO FUE NUNCA
## 2 1 VEZ EN EL ULTIMO AÑO
##   p103_113      p103_14
## 1     <NA> NO FUE NUNCA
## 2        0 NO FUE NUNCA
##   p103_114      p103_15
## 1     <NA> NO FUE NUNCA
## 2     <NA> NO FUE NUNCA
##   p103_115      p103_16
## 1     <NA> NO FUE NUNCA
## 2     <NA> NO FUE NUNCA
##   p103_116      p103_17
## 1     <NA> NO FUE NUNCA
## 2     <NA> NO FUE NUNCA
##   p103_117
## 1     <NA>
## 2     <NA>
##                  p103_18
## 1           NO FUE NUNCA
## 2 1 VEZ EN EL ULTIMO AÑO
##   p103_118
## 1     <NA>
## 2        0
##                  p103_19
## 1           NO FUE NUNCA
## 2 1 VEZ EN EL ULTIMO AÑO
##   p103_119          p103_20
## 1     <NA>     NO FUE NUNCA
## 2        0 ENTRE 1 Y 5 AÑOS
##   p103_120 p104 p104_1 p104_2
## 1     <NA>    6      3      0
## 2     <NA>    1     NA     NA
##   p105                  p106
## 1    3 SECUNDARIA INCOMPLETA
## 2    2   SECUNDARIA COMPLETA
##                              p107
## 1          OTRO MIEMBRO DEL HOGAR
## 2 LA PERSONA QUE FUE ENTREVISTADA
##                  p108    p109
## 1 SECUNDARIA COMPLETA TRABAJA
## 2                <NA> TRABAJA
##                  p110
## 1            EMPLEADO
## 2 ATENCION AL PUBLICO
##                                                         p110b
## 1 TRABAJADOR/OBRERO CALIFICADO. EMPLEADO ADMINISTRATIVO MEDIO
## 2 TRABAJADOR/OBRERO CALIFICADO. EMPLEADO ADMINISTRATIVO MEDIO
##   p111 p111b p112 p113_1
## 1 <NA>  <NA>   SI     SI
## 2 <NA>  <NA>   NO     NO
##   p113_2 p113_3 p113_4 p113_5
## 1     SI     NO     SI     SI
## 2     NO     NO     NO     SI
##       p114 p115_1 p115_2
## 1   PROPIA     NO     NO
## 2 PRESTADA     NO     NO
##   p115_3 p115_4 p115_5
## 1     NO     NO     NO
## 2     NO     NO     NO
##                        p116
## 1 BARRIO DE VIVIENDA SOCIAL
## 2 BARRIO DE VIVIENDA SOCIAL
##                       p116b
## 1 BARRIO DE VIVIENDA SOCIAL
## 2 BARRIO DE VIVIENDA SOCIAL
##           p117 NSEpuntaje
## 1         CASA         66
## 2 DEPARTAMENTO         46
##   NSEcat1 minutos_radio_1
## 1      C3              60
## 2      D1              60
##   minutos_radio_total
## 1                  60
## 2                  60
##   horas_radio_total
## 1                 1
## 2                 1
##   minutos_musica_1
## 1               60
## 2              180
##   minutos_musica_total
## 1                   90
## 2                  180
##   horas_musica_total
## 1                1.5
## 2                3.0
##   minutos_diario_1
## 1               60
## 2                0
##   minutos_diario_total
## 1                   60
## 2                   30
##   horas_diario_total
## 1                1.0
## 2                0.5
##   minutos_tv_1
## 1           60
## 2            0
##   minutos_tv_total
## 1               60
## 2               45
##   horas_tv_total
## 1           1.00
## 2           0.75
##   minutos_internet_1
## 1                480
## 2                120
##   minutos_internet_total
## 1                    480
## 2                    120
##   horas_internet_total
## 1                    8
## 2                    2
##   minutos_redes_1
## 1             240
## 2              60
##   minutos_redes_total
## 1                 240
## 2                  60
##   horas_redes_total
## 1                 4
## 2                 1
##   minutos_videojuegos_1
## 1                    60
## 2                     0
##   minutos_videojuegos_total
## 1                        60
## 2                         0
##   horas_videojuegos_total
## 1                       1
## 2                       0
##  [ reached 'max' / getOption("max.print") -- omitted 2800 rows ]

Lo más conveniente para realizar una inspección a la tabla es realizar algunas de las funciones de Análisis exploratorio de datos que vimos en la jornada anterior. Como el objetivo de este apartado es otro, lo vamos a dejar para que practiquen cada une de ustedes. Podemos descargar desde aquí el cuestionario aplicado en la encuesta.

¡Ahora sí, empecemos con la presentación y la práctica de las funciones de dplyr!


3.2.1. Select


Lo primero que tenemos que notar con este conjunto de datos es que tienen una infinidad de columnas (es un cuestionario largo) por lo cual, la primera tarea como analistas de datos es enfocarnos en seleccionar aquellas variables necesarias para nuestro análisis. En la encuesta tenemos información socioeconómica, sociodemográfica, cultural, etc. No tiene sentido trabajar con todas juntas. Para eso utilizamos la función select() que nos permite realizar una selección de variables o columnas. Vamos a elegir quedarnos con las columnas de información del entrevistado y las columnas que hacen referencia al consumo de radio para poner en prueba esta función.


#Selección de columnas 
encuesta_clean <- select(encuesta_cc, id, pondera_dem, fecha, region, sexo, edad, p1, p1otros,
         p2, p3, p4, p5, p6horas, p6minutos)


Varias cosas que comentar al respecto. Estamos creando un nuevo conjunto de datos, lo llamamos encuesta_clean para ir guardando las modificaciones que vayamos haciendo. En la función select() lo único que hicimos fue poner el objeto sobre el que se va a correr la función y listar las variables con las que vamos a trabajar. Finalmente nos gustaría mencionar que hay algunas variantes de la función select(), como son select_if() y select_at() que nos permiten realizar selección de variables que cumplen con alguna condición.


3.2.2. Filter


filter es una función que retiene un conjunto de observaciones (es lo mismo que decir filas) que cumplen con la condición que indicamos. En pocas palabras, filtramos los casos (unidad de análisis) que cumplen con los requisitos que seleccionamos. Para esto se utilizan los operadores de comparación que vimos en la primera sección. Utilizamos la función filter() para quedarnos con ciertas regiones de nuestro set de datos.

# Primero observamos los campos únicos que tiene la variable region
unique(encuesta_clean$region)
## [1] "CENTRO"    "NEA"      
## [3] "PATAGONIA" "NOA"      
## [5] "CUYO"      "CABA"     
## [7] "PBA"       NA
# Nos vamos a quedar con la región NOA y NEA
encuesta_clean <-  filter(encuesta_clean, region %in% c("NOA", "NEA"))

# Inspeccionamos que sean esas dos únicas regiones
unique(encuesta_clean$region)
## [1] "NEA" "NOA"


El operador %in% es la primera vez que lo mencionamos, como pueden imaginarse nos devuelve todos los casos que contengan a su interior algunas de esas opciones. Para complejizar un poco, se puede filtrar por más de una condición. Por ejemplo, queremos analizar los casos de la región NOA pero sólo los del sexo femenino. Recuerden no confundir el & (y) con el | (ó). No es lo mismo decir filtrar las personas que viven en la región NOA y es del sexo femenino que filtrar a las personas que viene en la region NOA o es del sexo femenino.

# Inspeccionamos el valor de sexo
unique(encuesta_clean$sexo)
## [1] "Varón" "Mujer"
#Nos quedamos con los casos de mujeres de NOA
mujeres_noa <- filter(encuesta_clean, region=="NOA" & sexo =="Mujer")

head(mujeres_noa)
##    id pondera_dem     fecha
## 1 346        3123  8/5/2017
## 2 347        3418  8/5/2017
## 3 348        7784  8/5/2017
## 4 349        5619  8/5/2017
## 5 350       11019  9/5/2017
## 6 356        6363 12/5/2017
##   region  sexo edad
## 1    NOA Mujer   13
## 2    NOA Mujer   26
## 3    NOA Mujer   38
## 4    NOA Mujer   57
## 5    NOA Mujer   69
## 6    NOA Mujer   13
##                                       p1
## 1         INFORMACION, ESTUDIAR, CONOCER
## 2              LA TRADICION, LA HISTORIA
## 3              LA TRADICION, LA HISTORIA
## 4 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
## 5    LOS MODALES, EL BUEN COMPORTAMIENTO
## 6         INFORMACION, ESTUDIAR, CONOCER
##   p1otros p2   p3   p4   p5
## 1    <NA> NO <NA> <NA> <NA>
## 2    <NA> NO <NA> <NA> <NA>
## 3    <NA> NO <NA> <NA> <NA>
## 4    <NA> NO <NA> <NA> <NA>
## 5    <NA> NO <NA> <NA> <NA>
## 6    <NA> NO <NA> <NA> <NA>
##   p6horas p6minutos
## 1      NA        NA
## 2      NA        NA
## 3      NA        NA
## 4      NA        NA
## 5      NA        NA
## 6      NA        NA


También se puede combinar con funciones. Por ejemplo, podemos seleccionar los casos de nuestra tabla cuya cantidad de horas de escucha de radio sea superior al promedio.


#Los que tienen más horas de radio escuchada
mas_promedio <- filter(encuesta_clean, p6horas >= mean(p6horas, na.rm=T))

head(mas_promedio)
##   id pondera_dem     fecha
## 1 44        9649 20/5/2017
## 2 45        2778 19/5/2017
## 3 49        4415 19/5/2017
## 4 54        1661 17/5/2017
## 5 57        2904 15/5/2017
## 6 62        4393 13/5/2017
##   region  sexo edad
## 1    NEA Varón   48
## 2    NEA Varón   63
## 3    NEA Mujer   55
## 4    NEA Varón   45
## 5    NEA Mujer   22
## 6    NEA Varón   26
##                                       p1
## 1                      EL ARTE, LO CULTO
## 2         INFORMACION, ESTUDIAR, CONOCER
## 3 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
## 4         INFORMACION, ESTUDIAR, CONOCER
## 5                                  NS/NC
## 6                      EL ARTE, LO CULTO
##   p1otros p2 p3
## 1    <NA> SI SI
## 2    <NA> SI NO
## 3    <NA> SI NO
## 4    <NA> SI NO
## 5    <NA> SI NO
## 6    <NA> SI SI
##                            p4
## 1        ALGUNAS VECES AL MES
## 2 TODOS O CASI TODOS LOS DIAS
## 3        ALGUNAS VECES AL MES
## 4 TODOS O CASI TODOS LOS DIAS
## 5 TODOS O CASI TODOS LOS DIAS
## 6 TODOS O CASI TODOS LOS DIAS
##   p5 p6horas p6minutos
## 1 FM       4         0
## 2 FM       3        30
## 3 FM       4         0
## 4 FM       3         0
## 5 FM       4        30
## 6 FM      12         0



3.2.3. Arrange


Arrange es una de las funciones que permite en R ordenar las filas de una tabla. Por ejemplo, ordenar de menor a mayor nuestra tabla por edad.

# Ordenamos 
arrange(encuesta_clean, edad) 
##      id pondera_dem     fecha
## 1    81        2933 19/5/2017
## 2   136        2112 16/5/2017
## 3   346        3123  8/5/2017
## 4   356        6363 12/5/2017
## 5   366        4994  9/5/2017
## 6   376        6079 10/5/2017
## 7   381        3877 14/5/2017
## 8   436       13116 13/5/2017
## 9   446        3940 16/5/2017
## 10  485       10423 28/5/2017
## 11  610        1551 18/5/2017
## 12  811        4595 21/5/2017
## 13  871        6177 23/5/2017
## 14 1061        8278  8/5/2017
## 15 1066       12656  8/5/2017
## 16 1071        6927  7/5/2017
## 17 1351        3094  6/7/2017
## 18 1396        6630 29/5/2017
## 19 1525        2267  8/6/2017
## 20   71        1235 12/5/2017
## 21   76        1309 11/5/2017
## 22   86        6219 19/5/2017
## 23  126         844 12/5/2017
## 24  151        1099 22/5/2017
## 25  166        2932 28/5/2017
## 26  361        6805  9/5/2017
## 27  426        8935 11/5/2017
## 28  496        1818 28/5/2017
## 29  511        3143 27/5/2017
## 30  516        7689 27/5/2017
## 31  531        3486  1/6/2017
## 32  556        6485 28/5/2017
## 33  605        7771 17/5/2017
## 34  616        9483 18/5/2017
## 35  806        8401 20/5/2017
## 36  816        5620 21/5/2017
## 37  941        5729 13/5/2017
## 38 1026       11672  6/5/2017
## 39 1426        5533  6/6/2017
## 40 1431        3686 13/6/2017
## 41 1551        3902  5/6/2017
## 42   56       11621 16/5/2017
## 43   66        4630 16/5/2017
## 44  116       12791 20/5/2017
## 45  161        2765 23/5/2017
## 46  171        7414 22/5/2017
## 47  196        5855 14/5/2017
## 48  201        6893 12/5/2017
## 49  351        5203 12/5/2017
## 50  386        5283 14/5/2017
## 51  411        2058 15/7/2017
## 52  441        6442 16/5/2017
## 53  456        6265 12/5/2017
## 54  461        2444 22/5/2017
## 55  466        1495 22/5/2017
## 56  491        4460 28/5/2017
## 57  501        5901 20/5/2017
## 58  506        5413 20/5/2017
## 59  541        5563 19/5/2017
## 60  626       11533 26/5/2017
## 61  756       12452 24/5/2017
## 62  761       10268 19/5/2017
## 63  801       13737 20/5/2017
## 64  861        5546 22/5/2017
## 65 1011        4946 24/5/2017
## 66 1021        4771  6/5/2017
## 67 1356        2461  6/7/2017
## 68 1366        4280  7/7/2017
## 69 1421        4174  6/6/2017
## 70 1541        5391 11/6/2017
## 71 1550        1429  9/6/2017
##    region  sexo edad
## 1     NEA Varón   13
## 2     NEA Mujer   13
## 3     NOA Mujer   13
## 4     NOA Mujer   13
## 5     NOA Mujer   13
## 6     NOA Mujer   13
## 7     NOA Mujer   13
## 8     NOA Mujer   13
## 9     NOA Mujer   13
## 10    NOA Mujer   13
## 11    NOA Varón   13
## 12    NOA Varón   13
## 13    NOA Varón   13
## 14    NOA Varón   13
## 15    NOA Mujer   13
## 16    NOA Varón   13
## 17    NEA Varón   13
## 18    NEA Mujer   13
## 19    NEA Mujer   13
## 20    NEA Varón   14
## 21    NEA Mujer   14
## 22    NEA Mujer   14
## 23    NEA Mujer   14
## 24    NEA Varón   14
## 25    NEA Mujer   14
## 26    NOA Varón   14
## 27    NOA Mujer   14
## 28    NOA Mujer   14
## 29    NOA Varón   14
## 30    NOA Mujer   14
## 31    NOA Varón   14
## 32    NOA Mujer   14
## 33    NOA Mujer   14
## 34    NOA Mujer   14
## 35    NOA Mujer   14
## 36    NOA Mujer   14
## 37    NOA Varón   14
## 38    NOA Mujer   14
## 39    NEA Mujer   14
## 40    NEA Varón   14
## 41    NEA Varón   14
## 42    NEA Mujer   15
## 43    NEA Mujer   15
## 44    NEA Mujer   15
## 45    NEA Varón   15
## 46    NEA Varón   15
## 47    NEA Mujer   15
## 48    NEA Varón   15
## 49    NOA Varón   15
## 50    NOA Varón   15
## 51    NOA Varón   15
## 52    NOA Varón   15
## 53    NOA Mujer   15
## 54    NOA Varón   15
## 55    NOA Mujer   15
## 56    NOA Varón   15
## 57    NOA Varón   15
## 58    NOA Mujer   15
## 59    NOA Varón   15
## 60    NOA Mujer   15
## 61    NOA Mujer   15
## 62    NOA Varón   15
## 63    NOA Varón   15
## 64    NOA Varón   15
## 65    NOA Varón   15
## 66    NOA Varón   15
## 67    NEA Mujer   15
## 68    NEA Mujer   15
## 69    NEA Varón   15
## 70    NEA Varón   15
## 71    NEA Mujer   15
##                                        p1
## 1                       EL ARTE, LO CULTO
## 2               LA TRADICION, LA HISTORIA
## 3          INFORMACION, ESTUDIAR, CONOCER
## 4          INFORMACION, ESTUDIAR, CONOCER
## 5          INFORMACION, ESTUDIAR, CONOCER
## 6          INFORMACION, ESTUDIAR, CONOCER
## 7    HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 8               LA TRADICION, LA HISTORIA
## 9               LA TRADICION, LA HISTORIA
## 10                                  NS/NC
## 11              LA TRADICION, LA HISTORIA
## 12   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 13         INFORMACION, ESTUDIAR, CONOCER
## 14                                  NS/NC
## 15         INFORMACION, ESTUDIAR, CONOCER
## 16                                  NS/NC
## 17                                   OTRO
## 18                           LA IDENTIDAD
## 19                      EL ARTE, LO CULTO
## 20         INFORMACION, ESTUDIAR, CONOCER
## 21                      EL ARTE, LO CULTO
## 22   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 23    LOS MODALES, EL BUEN COMPORTAMIENTO
## 24              LA TRADICION, LA HISTORIA
## 25    LOS MODALES, EL BUEN COMPORTAMIENTO
## 26    LOS MODALES, EL BUEN COMPORTAMIENTO
## 27    LOS MODALES, EL BUEN COMPORTAMIENTO
## 28                                  NS/NC
## 29         INFORMACION, ESTUDIAR, CONOCER
## 30    LOS MODALES, EL BUEN COMPORTAMIENTO
## 31              LA TRADICION, LA HISTORIA
## 32         INFORMACION, ESTUDIAR, CONOCER
## 33    LOS MODALES, EL BUEN COMPORTAMIENTO
## 34   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 35              LA TRADICION, LA HISTORIA
## 36         INFORMACION, ESTUDIAR, CONOCER
## 37 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
## 38    LOS MODALES, EL BUEN COMPORTAMIENTO
## 39 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
## 40                                  NS/NC
## 41         INFORMACION, ESTUDIAR, CONOCER
## 42 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
## 43 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
## 44   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 45         INFORMACION, ESTUDIAR, CONOCER
## 46                      EL ARTE, LO CULTO
## 47   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 48   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 49              LA TRADICION, LA HISTORIA
## 50    LOS MODALES, EL BUEN COMPORTAMIENTO
## 51              LA TRADICION, LA HISTORIA
## 52              LA TRADICION, LA HISTORIA
## 53              LA TRADICION, LA HISTORIA
## 54                                  NS/NC
## 55         INFORMACION, ESTUDIAR, CONOCER
## 56              LA TRADICION, LA HISTORIA
## 57                      EL ARTE, LO CULTO
## 58                                  NS/NC
## 59              LA TRADICION, LA HISTORIA
## 60                                  NS/NC
## 61   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 62                                  NS/NC
## 63              LA TRADICION, LA HISTORIA
## 64         INFORMACION, ESTUDIAR, CONOCER
## 65   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 66   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 67 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
## 68         INFORMACION, ESTUDIAR, CONOCER
## 69    LOS MODALES, EL BUEN COMPORTAMIENTO
## 70   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 71                                  NS/NC
##       p1otros p2   p3
## 1        <NA> NO <NA>
## 2        <NA> SI   SI
## 3        <NA> NO <NA>
## 4        <NA> NO <NA>
## 5        <NA> NO <NA>
## 6        <NA> NO <NA>
## 7        <NA> NO <NA>
## 8        <NA> NO <NA>
## 9        <NA> NO <NA>
## 10       <NA> SI   NO
## 11       <NA> SI   SI
## 12       <NA> NO <NA>
## 13       <NA> NO <NA>
## 14       <NA> SI   SI
## 15       <NA> NO <NA>
## 16       <NA> NO <NA>
## 17 MONUMENTOS NO <NA>
## 18       <NA> NO <NA>
## 19       <NA> SI   NO
## 20       <NA> SI   NO
## 21       <NA> SI   NO
## 22       <NA> NO <NA>
## 23       <NA> SI   NO
## 24       <NA> SI   SI
## 25       <NA> NO <NA>
## 26       <NA> NO <NA>
## 27       <NA> NO <NA>
## 28       <NA> SI   NO
## 29       <NA> NO <NA>
## 30       <NA> NO <NA>
## 31       <NA> NO <NA>
## 32       <NA> NO <NA>
## 33       <NA> NO <NA>
## 34       <NA> NO <NA>
## 35       <NA> NO <NA>
## 36       <NA> NO <NA>
## 37       <NA> NO <NA>
## 38       <NA> SI   NO
## 39       <NA> NO <NA>
## 40       <NA> NO <NA>
## 41       <NA> NO <NA>
## 42       <NA> NO <NA>
## 43       <NA> NO <NA>
## 44       <NA> SI   NO
## 45       <NA> NO <NA>
## 46       <NA> NO <NA>
## 47       <NA> SI   NO
## 48       <NA> NO <NA>
## 49       <NA> NO <NA>
## 50       <NA> NO <NA>
## 51       <NA> SI   NO
## 52       <NA> NO <NA>
## 53       <NA> SI   NO
## 54       <NA> NO <NA>
## 55       <NA> NO <NA>
## 56       <NA> NO <NA>
## 57       <NA> SI   SI
## 58       <NA> NO <NA>
## 59       <NA> NO <NA>
## 60       <NA> NO <NA>
## 61       <NA> NO <NA>
## 62       <NA> NO <NA>
## 63       <NA> SI   NO
## 64       <NA> NO <NA>
## 65       <NA> NO <NA>
## 66       <NA> NO <NA>
## 67       <NA> SI   SI
## 68       <NA> SI   SI
## 69       <NA> SI   NO
## 70       <NA> NO <NA>
## 71       <NA> NO <NA>
##                             p4
## 1                         <NA>
## 2      ALGUNOS DIAS POR SEMANA
## 3                         <NA>
## 4                         <NA>
## 5                         <NA>
## 6                         <NA>
## 7                         <NA>
## 8                         <NA>
## 9                         <NA>
## 10 TODOS O CASI TODOS LOS DIAS
## 11        ALGUNAS VECES AL MES
## 12                        <NA>
## 13                        <NA>
## 14 TODOS O CASI TODOS LOS DIAS
## 15                        <NA>
## 16                        <NA>
## 17                        <NA>
## 18                        <NA>
## 19 TODOS O CASI TODOS LOS DIAS
## 20 TODOS O CASI TODOS LOS DIAS
## 21        ALGUNAS VECES AL MES
## 22                        <NA>
## 23        ALGUNAS VECES AL MES
## 24        ALGUNAS VECES AL MES
## 25                        <NA>
## 26                        <NA>
## 27                        <NA>
## 28 TODOS O CASI TODOS LOS DIAS
## 29                        <NA>
## 30                        <NA>
## 31                        <NA>
## 32                        <NA>
## 33                        <NA>
## 34                        <NA>
## 35                        <NA>
## 36                        <NA>
## 37                        <NA>
## 38     ALGUNOS DIAS POR SEMANA
## 39                        <NA>
## 40                        <NA>
## 41                        <NA>
## 42                        <NA>
## 43                        <NA>
## 44     ALGUNOS DIAS POR SEMANA
## 45                        <NA>
## 46                        <NA>
## 47 TODOS O CASI TODOS LOS DIAS
## 48                        <NA>
## 49                        <NA>
## 50                        <NA>
## 51        ALGUNAS VECES AL MES
## 52                        <NA>
## 53     ALGUNOS DIAS POR SEMANA
## 54                        <NA>
## 55                        <NA>
## 56                        <NA>
## 57     ALGUNOS DIAS POR SEMANA
## 58                        <NA>
## 59                        <NA>
## 60                        <NA>
## 61                        <NA>
## 62                        <NA>
## 63 TODOS O CASI TODOS LOS DIAS
## 64                        <NA>
## 65                        <NA>
## 66                        <NA>
## 67 TODOS O CASI TODOS LOS DIAS
## 68 TODOS O CASI TODOS LOS DIAS
## 69     ALGUNOS DIAS POR SEMANA
## 70                        <NA>
## 71                        <NA>
##                 p5 p6horas
## 1             <NA>      NA
## 2               FM       2
## 3             <NA>      NA
## 4             <NA>      NA
## 5             <NA>      NA
## 6             <NA>      NA
## 7             <NA>      NA
## 8             <NA>      NA
## 9             <NA>      NA
## 10              FM       1
## 11 AMBAS POR IGUAL       1
## 12            <NA>      NA
## 13            <NA>      NA
## 14              FM       1
## 15            <NA>      NA
## 16            <NA>      NA
## 17            <NA>      NA
## 18            <NA>      NA
## 19              AM       2
## 20              FM       1
## 21              FM       1
## 22            <NA>      NA
## 23           NS/NC       1
## 24              FM       0
## 25            <NA>      NA
## 26            <NA>      NA
## 27            <NA>      NA
## 28              FM       4
## 29            <NA>      NA
## 30            <NA>      NA
## 31            <NA>      NA
## 32            <NA>      NA
## 33            <NA>      NA
## 34            <NA>      NA
## 35            <NA>      NA
## 36            <NA>      NA
## 37            <NA>      NA
## 38              FM       1
## 39            <NA>      NA
## 40            <NA>      NA
## 41            <NA>      NA
## 42            <NA>      NA
## 43            <NA>      NA
## 44              FM       1
## 45            <NA>      NA
## 46            <NA>      NA
## 47 AMBAS POR IGUAL      10
## 48            <NA>      NA
## 49            <NA>      NA
## 50            <NA>      NA
## 51              FM       0
## 52            <NA>      NA
## 53              FM       1
## 54            <NA>      NA
## 55            <NA>      NA
## 56            <NA>      NA
## 57           NS/NC       0
## 58            <NA>      NA
## 59            <NA>      NA
## 60            <NA>      NA
## 61            <NA>      NA
## 62            <NA>      NA
## 63 AMBAS POR IGUAL       0
## 64            <NA>      NA
## 65            <NA>      NA
## 66            <NA>      NA
## 67              FM       3
## 68              AM       2
## 69              FM       2
## 70            <NA>      NA
## 71            <NA>      NA
##    p6minutos
## 1         NA
## 2          0
## 3         NA
## 4         NA
## 5         NA
## 6         NA
## 7         NA
## 8         NA
## 9         NA
## 10         0
## 11         0
## 12        NA
## 13        NA
## 14         0
## 15        NA
## 16        NA
## 17        NA
## 18        NA
## 19         0
## 20         0
## 21         0
## 22        NA
## 23         0
## 24        40
## 25        NA
## 26        NA
## 27        NA
## 28         0
## 29        NA
## 30        NA
## 31        NA
## 32        NA
## 33        NA
## 34        NA
## 35        NA
## 36        NA
## 37        NA
## 38         0
## 39        NA
## 40        NA
## 41        NA
## 42        NA
## 43        NA
## 44         0
## 45        NA
## 46        NA
## 47         0
## 48        NA
## 49        NA
## 50        NA
## 51        20
## 52        NA
## 53         0
## 54        NA
## 55        NA
## 56        NA
## 57        30
## 58        NA
## 59        NA
## 60        NA
## 61        NA
## 62        NA
## 63        30
## 64        NA
## 65        NA
## 66        NA
## 67         0
## 68         0
## 69         0
## 70        NA
## 71        NA
##  [ reached 'max' / getOption("max.print") -- omitted 729 rows ]


Si agregamos la función desc() podemos invertir el orden.

# Ordenamos de manera descendente
encuesta_clean %>% 
  arrange(desc(edad)) %>% 
  head()
##     id pondera_dem     fecha
## 1 1560        3873  5/6/2017
## 2 1360        1197  5/7/2017
## 3 1030        5055  6/5/2017
## 4 1436        3637 13/6/2017
## 5   70        6501 12/5/2017
## 6  185        1874 13/5/2017
##   region  sexo edad
## 1    NEA Mujer   92
## 2    NEA Mujer   89
## 3    NOA Mujer   88
## 4    NEA Varón   87
## 5    NEA Mujer   86
## 6    NEA Varón   84
##                                       p1
## 1              LA TRADICION, LA HISTORIA
## 2   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 3              LA TRADICION, LA HISTORIA
## 4   HABITOS, COSTUMBRES, COMPORTAMIENTOS
## 5                      EL ARTE, LO CULTO
## 6 LA FORMA DE PENSAR, IDEOLOGIA, VALORES
##   p1otros p2   p3
## 1    <NA> NO <NA>
## 2    <NA> SI   NO
## 3    <NA> NO <NA>
## 4    <NA> SI   NO
## 5    <NA> NO <NA>
## 6    <NA> SI   NO
##                            p4
## 1                        <NA>
## 2     ALGUNOS DIAS POR SEMANA
## 3                        <NA>
## 4 TODOS O CASI TODOS LOS DIAS
## 5                        <NA>
## 6 TODOS O CASI TODOS LOS DIAS
##                p5 p6horas
## 1            <NA>      NA
## 2 AMBAS POR IGUAL       6
## 3            <NA>      NA
## 4 AMBAS POR IGUAL       4
## 5            <NA>      NA
## 6              FM       1
##   p6minutos
## 1        NA
## 2         0
## 3        NA
## 4        30
## 5        NA
## 6         0



3.2.4. Summarise


Summarise nos permite aplicar un resumen o calcular un indicador que sintetice la información de una o varias variables del dataframe. Una medida de resumen puede saber la cantidad de personas encuestadas y el universo de personas (utilizando la ponderación). Recuerden que esta encuesta es una muestra (personas que responden la encuesta) de tipo probabilística. Esto quiere decir que usando la ponderación podemos extrapolar los resultados al universo.


#Cantidad de personas pr región y sexo
tabla_cantidad <- summarise(encuesta_clean,
                           Personas = sum(pondera_dem),
                           cantidad_de_casos = n())

tabla_cantidad
##   Personas cantidad_de_casos
## 1  4864089               800


Como estamos trabajando con una encuesta, para saber la cantidad de personas que forman parte del universo tenemos que sumar la variable de ponderación, en este caso es pondera_dem. Además, creamos la variable cantidad_de_casos, nos sirve para saber cuántas respuestas respondieron la encuesta usando la función n() (que no es para nada intuitivo).


3.2.5. Group by


Summarise podemos combinarla con una función increíble (que también se combina con mutate y otras funciones) que es group_by. En este caso, vamos a agrupar por región y sexo para hacer los conteos de personas que forman parte de la muestra y del universo por grupo. Por ejemplo, va a realizar los cálculos que vimos previamente de las mujeres que son del NEA, mujeres que son del NOA, varones que son del NEA, y varones que son del NOA. Veamos el código y el output que genera:


tabla_cantidad <- group_by(encuesta_clean, sexo, region)
tabla_resumen <- summarise(tabla_cantidad,
                            Personas = sum(pondera_dem),
                            cantidad_de_casos = n())
tabla_resumen
## # A tibble: 4 x 4
## # Groups:   sexo [2]
##   sexo  region Personas
##   <chr> <chr>     <dbl>
## 1 Mujer NEA      979450
## 2 Mujer NOA     1552643
## 3 Varón NEA      897181
## 4 Varón NOA     1434815
## # ... with 1 more variable:
## #   cantidad_de_casos <int>


También podríamos realizar esto mismo de manera más sencilla aplicando el count(). Pero la idea era presentarles la combinación de estás hermosas funciones. Veamos cómo se realiza con el count():

tabla_cantidad <- group_by(encuesta_clean, sexo, region)
tabla_cantidad <- summarise(tabla_cantidad,
                            Personas = sum(pondera_dem),
                            cantidad_de_casos = n())
tabla_cantidad
## # A tibble: 4 x 4
## # Groups:   sexo [2]
##   sexo  region Personas
##   <chr> <chr>     <dbl>
## 1 Mujer NEA      979450
## 2 Mujer NOA     1552643
## 3 Varón NEA      897181
## 4 Varón NOA     1434815
## # ... with 1 more variable:
## #   cantidad_de_casos <int>

3.2.6. Mutate


La última función que vamos a ver de dplyr es súper, súper, súper necesaria. mutate nos permite hacer dos cosas fundamentales: modificar variables existentes y crear nuevas. La sintaxis es igual a como venimos trabajando. Vamos a crear dos variables en base a la edad. En primer lugar, vamos a crear una variable que identifique si la persona es menor de edad o no, y en segundo lugar vamos a crear una variable de edad, pero con rangos. Nos vamos a apoyar en dos funciones más ifelse() y case_when(), para llevar adelante esta tarea.


# Creamos dos variables en base a la edad
encuesta_clean <- encuesta_clean %>% 
  mutate( flag_menor = ifelse( edad>=18, 'mayor de edad', 'menor de edad'),
          edad_categorica = case_when( 
                              edad <= 30 ~ '30 o menos',
                              edad  > 30 & edad <= 45 ~ '31 a 45',
                              edad  > 45 & edad <= 60 ~ '46 a 60',
                              edad  > 60 & edad <= 75 ~ '61 a 75',
                              edad  > 75 ~ '76 o más',
                              TRUE ~ "Sin edad"
                              ) )


Las dos líneas son muy parecidas, sólo que en ifelse() evalúa una condición, si se cumple devuelve la primera expresión si no se cumple la otra. Con case_when() en cambio evaluamos múltiples condiciones y para cada una el resultado que queremos. Es muy importante tener en cuenta que las condiciones es preferible que sean excluyentes, es decir, que no haya posibilidad de que se cumpla dos veces. Si no lo hacemos así, lo que va a ocurrir es que se va a aplicar la primera condición que sea verdadera. Como con select() aquí también tenemos variantes como el mutate_if() y mutate_at. Es muy útil para cuando necesitamos aplicar una misma transformación a una serie de columnas. Por ejemplo, si queremos pasar un tipo de dato entero a todas las variables que son double, lo podemos hacer muy fácilmente con mutate_if.


# Convertimos a entero todas las variables que son double
encuesta_clean %>% 
  mutate_if(is.double, as.integer) %>% 
  head()
##   id pondera_dem     fecha
## 1 41        9283 20/5/2017
## 2 42        9280 20/5/2017
## 3 43        1608 19/5/2017
## 4 44        9649 20/5/2017
## 5 45        2778 19/5/2017
## 6 46        5623 19/5/2017
##   region  sexo edad
## 1    NEA Varón   17
## 2    NEA Varón   24
## 3    NEA Varón   35
## 4    NEA Varón   48
## 5    NEA Varón   63
## 6    NEA Mujer   19
##                               p1
## 1      LA TRADICION, LA HISTORIA
## 2 INFORMACION, ESTUDIAR, CONOCER
## 3      LA TRADICION, LA HISTORIA
## 4              EL ARTE, LO CULTO
## 5 INFORMACION, ESTUDIAR, CONOCER
## 6 INFORMACION, ESTUDIAR, CONOCER
##   p1otros p2 p3
## 1    <NA> SI SI
## 2    <NA> SI NO
## 3    <NA> SI NO
## 4    <NA> SI SI
## 5    <NA> SI NO
## 6    <NA> SI SI
##                            p4
## 1 TODOS O CASI TODOS LOS DIAS
## 2 TODOS O CASI TODOS LOS DIAS
## 3        ALGUNAS VECES AL MES
## 4        ALGUNAS VECES AL MES
## 5 TODOS O CASI TODOS LOS DIAS
## 6        ALGUNAS VECES AL MES
##   p5 p6horas p6minutos
## 1 FM       2         0
## 2 FM       2         0
## 3 FM       2         0
## 4 FM       4         0
## 5 FM       3        30
## 6 AM       1         0
##      flag_menor
## 1 menor de edad
## 2 mayor de edad
## 3 mayor de edad
## 4 mayor de edad
## 5 mayor de edad
## 6 mayor de edad
##   edad_categorica
## 1      30 o menos
## 2      30 o menos
## 3         31 a 45
## 4         46 a 60
## 5         61 a 75
## 6      30 o menos



3.2.7. Joins


Muchas veces, tenemos dos o más tablas que comparten entre sí una identificación común. Por ejemplo, imaginemos que estamos trabajando como hicimos antes con un gráfico de las comunas de capital federal y queremos graficar la cantidad de casos de COVID por comuna. En general vamos a tener una tabla con la geografía de las comunas y en la otra tabla una con los casos de COVID por cada una. Para realizar el gráfico vamos a tener que unificarlas.

Hay distintos tipos de joins, los más comunes son left_join() e inner_join(). La diferencia entre ellos es que el primero, deja todos los casos de una tabla de referencia (la de la izquierda) y le va pegando todos los casos que encuentra por la columna que comparten de la tabla de la derecha. Si tenemos un caso en la tabla izquierda que no está en la derecha igual lo vamos a visualizar. La función de inner_join() sólo nos va a devolver como resultado los casos que encuentre en ambas tablas.


# Ejemplo de joins
# Notas de sociales
notas_soc <- data.frame(id_alumnes = LETTERS[1:5],
                     notas_soc = c(10, 8, 9, 5, 9))

# Las notas de matematica
notas_mat <- data.frame(id_alumnes = LETTERS[1:3],
                         notas_mat = c(8, 9, 7))
# Left join
notas_soc%>% 
  left_join(notas_mat, by = c("id_alumnes"="id_alumnes"))
##   id_alumnes notas_soc
## 1          A        10
## 2          B         8
## 3          C         9
## 4          D         5
## 5          E         9
##   notas_mat
## 1         8
## 2         9
## 3         7
## 4        NA
## 5        NA
# Inner join
notas_soc  %>% 
  inner_join(notas_mat, by = c("id_alumnes"="id_alumnes"))
##   id_alumnes notas_soc
## 1          A        10
## 2          B         8
## 3          C         9
##   notas_mat
## 1         8
## 2         9
## 3         7


La unificación de bases de datos, o tablas, puede realizarse con otras funciones, otras variantes son right_join() y full_join(), si quieren aprender más de joins y de forma interactiva no se pierdan de este link .


3.2.8. Pipe


Si hay algo súper novedoso y útil que introdujo tydiverse en el mundo de R la función pipe, que no es más ni menos que otro operador, cuyo símbolo es el siguiente: %>%. Lo que nos permite el Pipe de R es concatenar funciones de una manera mucho más legible que con R base. Sabemos que suena chino básico, pero con la práctica termina resultando híper amigable. Nosotros decimos que el pipe es como “una línea de montaje”. Esto quiere decir que cada línea de código aplica una transformación al objeto (que estamos trabajando) pero teniendo en cuenta la modificación previa. Esto nos va a permitir ahorrarnos unas cuantas líneas de texto y mejorar la legibilidad del código. Veamos un ejemplo práctico con la encuesta de consumos culturales con la que veníamos trabajando:

En un mismo código planteamos: 1- Seleccionar las variables: id, pondera_dem, fecha, region, sexo 2- Filtrar región NOA y NEA 3- Agrupamos por región y contamos cuántas personas respondieron la encuesta

encuesta_cc %>% 
  select(id, pondera_dem, fecha, region, sexo) %>% 
  filter(region %in% c("NOA", "NEA")) %>% 
  group_by(region, sexo) %>%
  summarise(Personas = sum(pondera_dem),
            cantidad_de_casos = n())
## # A tibble: 4 x 4
## # Groups:   region [2]
##   region sexo  Personas
##   <chr>  <chr>    <dbl>
## 1 NEA    Mujer   979450
## 2 NEA    Varón   897181
## 3 NOA    Mujer  1552643
## 4 NOA    Varón  1434815
## # ... with 1 more variable:
## #   cantidad_de_casos <int>



En pocas palabras, cada línea de código adiciona una transformación sobre la tabla. Por esto decíamos que el pipe, funciona como una línea de montaje: cada línea de código agrega una modificación del objeto con el que se está trabajando. Al pipe también se lo conoce como las tuberías de r.


“Cada línea de código adiciona una transformación sobre la tabla. Por esto decíamos que el pipe, funciona como una línea de montaje: cada línea de código agrega una modificación del objeto con el que se está trabajando.”



3.2. TIDYR


Otra biblioteca dentro del paradigma de Tidyverse es tidyr. La misma nos permite realizar otro tipo de transformaciones que pueden resultar de ayuda. Más adelante, veremos en aplicaciones prácticas separete() y unite() que como sus nombres lo indican nos permiten separar columnas por algún patrón y también unir columnas.

Encontramos en este paquete otras dos funciones que queremos que conozcan porque si o si las van a usar en algún momento, sobre todo a la hora de graficar. Estas son pivot_longer() y pivot_wider(). Cada vez que la usamos, le pegamos una ojeada al machete que nos provee R ejecutando:


# Recurrimos a la documentación para ver cómo funcionan las funciones
?pivot_wider
?pivot_longer


pivot_wider() incrementa el número de columnas y reduce el número de filas. Veamos un ejemplo con la tabla resumen que hicimos más arriba.

# Aplicamos la transformación con pivot_wider
tabla_wider <- tabla_resumen %>% 
  pivot_wider(names_from = sexo, 
              values_from = Personas)
tabla_wider
## # A tibble: 4 x 4
##   region cantidad_de_casos
##   <chr>              <int>
## 1 NEA                  201
## 2 NOA                  201
## 3 NEA                  199
## 4 NOA                  199
## # ... with 2 more variables:
## #   Mujer <dbl>, Varón <dbl>


Convertimos cada categoría de sexo en una nueva columna y los valores que llenan cada columna son los de cantidad de personas. Ahora nuestra tabla resumen tiene otro aspecto.

El caso de pivot_longer() incrementa el número de filas y reduce el nombre de columnas.

# Vovemos a convertir al formato original la tabla
tabla_longer <- tabla_wider %>% 
  pivot_longer(cols = -region,
               names_to = "sexo2", 
               values_to = "Personas", 
               values_drop_na = TRUE)
tabla_longer
## # A tibble: 8 x 3
##   region sexo2        Personas
##   <chr>  <chr>           <dbl>
## 1 NEA    cantidad_de~      201
## 2 NEA    Mujer          979450
## 3 NOA    cantidad_de~      201
## 4 NOA    Mujer         1552643
## 5 NEA    cantidad_de~      199
## 6 NEA    Varón          897181
## 7 NOA    cantidad_de~      199
## 8 NOA    Varón         1434815

3.3. LUBRIDATE


Queremos incorporar a nuestra caja de herramienta unas poquitas funciones más para trabajar con fechas. lubridate nos provee una serie de herramientas para crear objetos fechas y manipularlos. Si miramos la tabla con la que venimos trabajando van a encontrar una columna fecha, pero el tipo de dato que contiene es carácter, es decir que R lo está leyendo como texto. Esta puede ser incómodo para realizar algunas funciones temporales como contar los días transcurridos entre una fecha y la otra, o simplemente filtrar información. Vamos a un ejemplo:

# Veamos algunas funciones de lubridate
library(lubridate)

tabla_con_fechas <- encuesta_clean %>%
  select(id, fecha) %>% 
  mutate(fecha2 = dmy(fecha)) %>% # Creamos un objeto fecha
  mutate(anio = year(fecha2),
         mes = month(fecha2),
         dia = day(fecha2),
         dias_transcurridos =  (Sys.Date() - fecha2) )

tabla_con_fechas
##      id     fecha     fecha2
## 1    41 20/5/2017 2017-05-20
## 2    42 20/5/2017 2017-05-20
## 3    43 19/5/2017 2017-05-19
## 4    44 20/5/2017 2017-05-20
## 5    45 19/5/2017 2017-05-19
## 6    46 19/5/2017 2017-05-19
## 7    47 19/5/2017 2017-05-19
## 8    48 19/5/2017 2017-05-19
## 9    49 19/5/2017 2017-05-19
## 10   50 19/5/2017 2017-05-19
## 11   51 15/5/2017 2017-05-15
## 12   52 16/5/2017 2017-05-16
## 13   53 16/5/2017 2017-05-16
## 14   54 17/5/2017 2017-05-17
## 15   55 16/5/2017 2017-05-16
## 16   56 16/5/2017 2017-05-16
## 17   57 15/5/2017 2017-05-15
## 18   58 15/5/2017 2017-05-15
## 19   59 15/5/2017 2017-05-15
## 20   60 15/5/2017 2017-05-15
## 21   61 16/5/2017 2017-05-16
## 22   62 13/5/2017 2017-05-13
## 23   63 12/5/2017 2017-05-12
## 24   64 13/5/2017 2017-05-13
## 25   65 13/5/2017 2017-05-13
## 26   66 16/5/2017 2017-05-16
## 27   67 12/5/2017 2017-05-12
## 28   68 13/5/2017 2017-05-13
## 29   69 16/5/2017 2017-05-16
## 30   70 12/5/2017 2017-05-12
## 31   71 12/5/2017 2017-05-12
## 32   72 12/5/2017 2017-05-12
## 33   73 11/5/2017 2017-05-11
## 34   74 11/5/2017 2017-05-11
## 35   75 11/5/2017 2017-05-11
## 36   76 11/5/2017 2017-05-11
## 37   77 12/5/2017 2017-05-12
## 38   78 12/5/2017 2017-05-12
## 39   79 11/5/2017 2017-05-11
## 40   80 12/5/2017 2017-05-12
## 41   81 19/5/2017 2017-05-19
## 42   82 19/5/2017 2017-05-19
## 43   83 19/5/2017 2017-05-19
## 44   84 19/5/2017 2017-05-19
## 45   85 19/5/2017 2017-05-19
## 46   86 19/5/2017 2017-05-19
## 47   87 19/5/2017 2017-05-19
## 48   88 19/5/2017 2017-05-19
## 49   89 19/5/2017 2017-05-19
## 50   90 19/5/2017 2017-05-19
## 51   91 22/5/2017 2017-05-22
## 52   92 22/5/2017 2017-05-22
## 53   93 22/5/2017 2017-05-22
## 54   94 22/5/2017 2017-05-22
## 55   95 22/5/2017 2017-05-22
## 56   96 22/5/2017 2017-05-22
## 57   97 22/5/2017 2017-05-22
## 58   98 22/5/2017 2017-05-22
## 59   99 22/5/2017 2017-05-22
## 60  100 22/5/2017 2017-05-22
## 61  101 20/5/2017 2017-05-20
## 62  102 20/5/2017 2017-05-20
## 63  103 20/5/2017 2017-05-20
## 64  104 25/5/2017 2017-05-25
## 65  105 20/5/2017 2017-05-20
## 66  106 20/5/2017 2017-05-20
## 67  107 20/5/2017 2017-05-20
## 68  108 20/5/2017 2017-05-20
## 69  109 20/5/2017 2017-05-20
## 70  110 20/5/2017 2017-05-20
## 71  111 20/5/2017 2017-05-20
## 72  112 20/5/2017 2017-05-20
## 73  113 20/5/2017 2017-05-20
## 74  114 20/5/2017 2017-05-20
## 75  115 20/5/2017 2017-05-20
## 76  116 20/5/2017 2017-05-20
## 77  117 20/5/2017 2017-05-20
## 78  118 20/5/2017 2017-05-20
## 79  119 20/5/2017 2017-05-20
## 80  120 20/5/2017 2017-05-20
## 81  121 12/5/2017 2017-05-12
## 82  122 15/5/2017 2017-05-15
## 83  123 15/5/2017 2017-05-15
## 84  124 15/5/2017 2017-05-15
## 85  125 14/5/2017 2017-05-14
## 86  126 12/5/2017 2017-05-12
## 87  127 15/5/2017 2017-05-15
## 88  128 14/5/2017 2017-05-14
## 89  129 10/5/2017 2017-05-10
## 90  130 10/5/2017 2017-05-10
## 91  131 16/5/2017 2017-05-16
## 92  132 16/5/2017 2017-05-16
## 93  133 16/5/2017 2017-05-16
## 94  134 14/5/2017 2017-05-14
## 95  135 15/5/2017 2017-05-15
## 96  136 16/5/2017 2017-05-16
## 97  137 15/5/2017 2017-05-15
## 98  138 15/5/2017 2017-05-15
## 99  139  8/5/2017 2017-05-08
## 100 140 15/5/2017 2017-05-15
## 101 141 17/5/2017 2017-05-17
## 102 142 19/5/2017 2017-05-19
## 103 143 12/5/2017 2017-05-12
## 104 144 17/5/2017 2017-05-17
## 105 145 19/5/2017 2017-05-19
## 106 146 17/5/2017 2017-05-17
## 107 147 17/5/2017 2017-05-17
## 108 148 17/5/2017 2017-05-17
## 109 149 16/5/2017 2017-05-16
## 110 150 17/5/2017 2017-05-17
## 111 151 22/5/2017 2017-05-22
## 112 152 21/5/2017 2017-05-21
## 113 153 22/5/2017 2017-05-22
## 114 154 22/5/2017 2017-05-22
## 115 155 21/5/2017 2017-05-21
## 116 156 21/5/2017 2017-05-21
## 117 157 21/5/2017 2017-05-21
## 118 158 21/5/2017 2017-05-21
## 119 159 21/5/2017 2017-05-21
## 120 160 22/5/2017 2017-05-22
## 121 161 23/5/2017 2017-05-23
## 122 162 23/5/2017 2017-05-23
## 123 163 24/5/2017 2017-05-24
## 124 164 24/5/2017 2017-05-24
## 125 165 23/5/2017 2017-05-23
## 126 166 28/5/2017 2017-05-28
## 127 167 23/5/2017 2017-05-23
## 128 168 24/5/2017 2017-05-24
## 129 169 24/5/2017 2017-05-24
## 130 170 23/5/2017 2017-05-23
## 131 171 22/5/2017 2017-05-22
## 132 172 22/5/2017 2017-05-22
## 133 173 22/5/2017 2017-05-22
## 134 174 22/5/2017 2017-05-22
## 135 175 22/5/2017 2017-05-22
## 136 176 22/5/2017 2017-05-22
## 137 177 22/5/2017 2017-05-22
## 138 178 22/5/2017 2017-05-22
## 139 179 22/5/2017 2017-05-22
## 140 180 22/5/2017 2017-05-22
## 141 181  7/5/2017 2017-05-07
## 142 182  7/5/2017 2017-05-07
##     anio mes dia
## 1   2017   5  20
## 2   2017   5  20
## 3   2017   5  19
## 4   2017   5  20
## 5   2017   5  19
## 6   2017   5  19
## 7   2017   5  19
## 8   2017   5  19
## 9   2017   5  19
## 10  2017   5  19
## 11  2017   5  15
## 12  2017   5  16
## 13  2017   5  16
## 14  2017   5  17
## 15  2017   5  16
## 16  2017   5  16
## 17  2017   5  15
## 18  2017   5  15
## 19  2017   5  15
## 20  2017   5  15
## 21  2017   5  16
## 22  2017   5  13
## 23  2017   5  12
## 24  2017   5  13
## 25  2017   5  13
## 26  2017   5  16
## 27  2017   5  12
## 28  2017   5  13
## 29  2017   5  16
## 30  2017   5  12
## 31  2017   5  12
## 32  2017   5  12
## 33  2017   5  11
## 34  2017   5  11
## 35  2017   5  11
## 36  2017   5  11
## 37  2017   5  12
## 38  2017   5  12
## 39  2017   5  11
## 40  2017   5  12
## 41  2017   5  19
## 42  2017   5  19
## 43  2017   5  19
## 44  2017   5  19
## 45  2017   5  19
## 46  2017   5  19
## 47  2017   5  19
## 48  2017   5  19
## 49  2017   5  19
## 50  2017   5  19
## 51  2017   5  22
## 52  2017   5  22
## 53  2017   5  22
## 54  2017   5  22
## 55  2017   5  22
## 56  2017   5  22
## 57  2017   5  22
## 58  2017   5  22
## 59  2017   5  22
## 60  2017   5  22
## 61  2017   5  20
## 62  2017   5  20
## 63  2017   5  20
## 64  2017   5  25
## 65  2017   5  20
## 66  2017   5  20
## 67  2017   5  20
## 68  2017   5  20
## 69  2017   5  20
## 70  2017   5  20
## 71  2017   5  20
## 72  2017   5  20
## 73  2017   5  20
## 74  2017   5  20
## 75  2017   5  20
## 76  2017   5  20
## 77  2017   5  20
## 78  2017   5  20
## 79  2017   5  20
## 80  2017   5  20
## 81  2017   5  12
## 82  2017   5  15
## 83  2017   5  15
## 84  2017   5  15
## 85  2017   5  14
## 86  2017   5  12
## 87  2017   5  15
## 88  2017   5  14
## 89  2017   5  10
## 90  2017   5  10
## 91  2017   5  16
## 92  2017   5  16
## 93  2017   5  16
## 94  2017   5  14
## 95  2017   5  15
## 96  2017   5  16
## 97  2017   5  15
## 98  2017   5  15
## 99  2017   5   8
## 100 2017   5  15
## 101 2017   5  17
## 102 2017   5  19
## 103 2017   5  12
## 104 2017   5  17
## 105 2017   5  19
## 106 2017   5  17
## 107 2017   5  17
## 108 2017   5  17
## 109 2017   5  16
## 110 2017   5  17
## 111 2017   5  22
## 112 2017   5  21
## 113 2017   5  22
## 114 2017   5  22
## 115 2017   5  21
## 116 2017   5  21
## 117 2017   5  21
## 118 2017   5  21
## 119 2017   5  21
## 120 2017   5  22
## 121 2017   5  23
## 122 2017   5  23
## 123 2017   5  24
## 124 2017   5  24
## 125 2017   5  23
## 126 2017   5  28
## 127 2017   5  23
## 128 2017   5  24
## 129 2017   5  24
## 130 2017   5  23
## 131 2017   5  22
## 132 2017   5  22
## 133 2017   5  22
## 134 2017   5  22
## 135 2017   5  22
## 136 2017   5  22
## 137 2017   5  22
## 138 2017   5  22
## 139 2017   5  22
## 140 2017   5  22
## 141 2017   5   7
## 142 2017   5   7
##     dias_transcurridos
## 1            1733 days
## 2            1733 days
## 3            1734 days
## 4            1733 days
## 5            1734 days
## 6            1734 days
## 7            1734 days
## 8            1734 days
## 9            1734 days
## 10           1734 days
## 11           1738 days
## 12           1737 days
## 13           1737 days
## 14           1736 days
## 15           1737 days
## 16           1737 days
## 17           1738 days
## 18           1738 days
## 19           1738 days
## 20           1738 days
## 21           1737 days
## 22           1740 days
## 23           1741 days
## 24           1740 days
## 25           1740 days
## 26           1737 days
## 27           1741 days
## 28           1740 days
## 29           1737 days
## 30           1741 days
## 31           1741 days
## 32           1741 days
## 33           1742 days
## 34           1742 days
## 35           1742 days
## 36           1742 days
## 37           1741 days
## 38           1741 days
## 39           1742 days
## 40           1741 days
## 41           1734 days
## 42           1734 days
## 43           1734 days
## 44           1734 days
## 45           1734 days
## 46           1734 days
## 47           1734 days
## 48           1734 days
## 49           1734 days
## 50           1734 days
## 51           1731 days
## 52           1731 days
## 53           1731 days
## 54           1731 days
## 55           1731 days
## 56           1731 days
## 57           1731 days
## 58           1731 days
## 59           1731 days
## 60           1731 days
## 61           1733 days
## 62           1733 days
## 63           1733 days
## 64           1728 days
## 65           1733 days
## 66           1733 days
## 67           1733 days
## 68           1733 days
## 69           1733 days
## 70           1733 days
## 71           1733 days
## 72           1733 days
## 73           1733 days
## 74           1733 days
## 75           1733 days
## 76           1733 days
## 77           1733 days
## 78           1733 days
## 79           1733 days
## 80           1733 days
## 81           1741 days
## 82           1738 days
## 83           1738 days
## 84           1738 days
## 85           1739 days
## 86           1741 days
## 87           1738 days
## 88           1739 days
## 89           1743 days
## 90           1743 days
## 91           1737 days
## 92           1737 days
## 93           1737 days
## 94           1739 days
## 95           1738 days
## 96           1737 days
## 97           1738 days
## 98           1738 days
## 99           1745 days
## 100          1738 days
## 101          1736 days
## 102          1734 days
## 103          1741 days
## 104          1736 days
## 105          1734 days
## 106          1736 days
## 107          1736 days
## 108          1736 days
## 109          1737 days
## 110          1736 days
## 111          1731 days
## 112          1732 days
## 113          1731 days
## 114          1731 days
## 115          1732 days
## 116          1732 days
## 117          1732 days
## 118          1732 days
## 119          1732 days
## 120          1731 days
## 121          1730 days
## 122          1730 days
## 123          1729 days
## 124          1729 days
## 125          1730 days
## 126          1725 days
## 127          1730 days
## 128          1729 days
## 129          1729 days
## 130          1730 days
## 131          1731 days
## 132          1731 days
## 133          1731 days
## 134          1731 days
## 135          1731 days
## 136          1731 days
## 137          1731 days
## 138          1731 days
## 139          1731 days
## 140          1731 days
## 141          1746 days
## 142          1746 days
##  [ reached 'max' / getOption("max.print") -- omitted 658 rows ]


Utilizamos dmy() que no es más que la forma que traía nuestro formato fecha anterior, estaba el día, el mes y el año. En la biblioteca tenemos todas las combinaciones, incluyendo las horas, los minutos y segundos si los tuviéramos, es súper intuitivo. También creamos unas columnas con el año, el mes y el día, e hicimos un pequeño cálculo de fechas comparando la fecha actual (del día que se ejecute) Sys.Date() y le restamos la fecha de realización de la encuesta. Esto último no lo podríamos hacer con una columna de tipo texto.


3.4. STRINGR


stringr nos abre las puertas al fabuloso mundo de la manipulación de texto, que no exageramos, es un mundo. Entre otras cosas nos permite trabajar con expresiones regulares para detectar, eliminar, reemplazar, contar patrones en nuestros textos. Dejamos dos enlaces para ampliar sobre estos tópicos [aquí] (https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular) y para descargar el Cheatsheet de Regex aquí.

library(stringr)
texto = "Vamos a trabajar con un texto creado para estos ejemplos, 
recuerden que podemos hacer casi las mismas cosas para cada fila de una columna.
Acá voy a poner unos números para usar de ejemplo; 123498-537"

# Pedimos el largo de una cadena
str_length(texto)
## [1] 201
# Contamos un patron
str_count(string = texto, pattern = "[0-9]") # contamos números
## [1] 9
str_count(string = texto, pattern = "[a-z]") # contamos minusculas
## [1] 149
# Detectamos un patron o palabra
str_detect(string = texto, pattern = "[á|é|í|ó|ú]") # Si hay palabras con acento
## [1] TRUE
# Remplazamos un texto
texto2 <- str_replace_all(string = texto, pattern = "-", replacement = "/")
texto2
## [1] "Vamos a trabajar con un texto creado para estos ejemplos, \nrecuerden que podemos hacer casi las mismas cosas para cada fila de una columna.\nAcá voy a poner unos números para usar de ejemplo; 123498/537"
# Removemos un patron
texto3 <- str_remove_all(string = texto2, pattern = "Acá.*")
texto3
## [1] "Vamos a trabajar con un texto creado para estos ejemplos, \nrecuerden que podemos hacer casi las mismas cosas para cada fila de una columna.\n"