Módulo práctico de ITA
(Grupo M)
Aprendimos a cargar datos, pero es raro que los datos estén preparados para empezar nuestro análisis, así que hay que “arreglar/limpiar” los datos. Para ello, tenemos que:
Hacer nuestros datos TIDY
Arreglarlos/modificarlos para que sean útiles para nuestros propósitos
Arreglando los datos
¿qué es el tidyverse?
principales pkgs del Tidyverse
tidyr
: convertir a tidy data
dplyr
: para manipular datos
ggplot2
: para hacer gráficos
… y algunos más
nos centraremos principalmente en dos paquetes: dplyr
y ggplot2
“Filosofía” del Tidyverse
Dos principios del tidyverse:
Los scripts deben ser “fácilmente” legibles por las personas
Resolver problemas complejos encadenando funciones simples con el operador pipe (%>%
)
El operador %>%
es crucial en el tidyverse
The pipe ha tenido tanto éxito que en 2021 apareció una nueva pipe en R-base: |>
Puedes leer sobre ella aquí
El operador %>%
es crucial en el tidyverse. Hay que saber usarlo y entenderlo
Es fácil. Pronto os sentiréis cómodos con él.
The pipe
The pipe (más ejemplos)
tidyr
Un aspecto importante del tidyverse es hacer los datos tidy
Parece fácil, y lo es: realmente es la situación a la que estamos acostumbrados, pero …
… mejor desarrollarlo con unos ejemplos
Tidy data … ejemplo I
¿Estos datos son tidy?
Tidy data … ejemplo II
¿Estos datos son tidy?
Tidy data … ejemplo III
¿Estos datos son tidy?
Sí, estos sí son datos tidy
Son más difíciles de leer por los humanos, pero es que los datos los leen las máquinas!!
Los datos tidy suelen estar en formato largo o long
Para trabajar à la tidyverse es crucial que los datos sean “tidy”(en formato LONG)
Es importante aprender a pasar de datos WIDE a LONG y viceversa
Con el pkg tidyr es sencillo pero …
De wide a LONG format con … tidyr::pivot_longer()
Tarea: convierte “df_wide” a formato LARGO
Aquí tienes un df en formato ANCHO, pásalo a formato LARGO
Está en formato ancho:
Te ayudará visualizar df_wide
y ver que columnas contienen valores de la misma variable
Tienes que usar tidyr::pivot_longer()
y en su primer argumento le tienes que decir que columnas hay que convertir a formato “largo”
#- la función pivot_longer() transforma los datos de formato ancho(wide) a formato largo(long)
library(tidyverse)
df_long <- df_wide %>%
tidyr::pivot_longer(cols = 2:4)
knitr::kable(df_long)
students | name | value |
---|---|---|
Pedro | w_2014 | 100 |
Pedro | w_2015 | 500 |
Pedro | w_2016 | 200 |
Carla | w_2014 | 400 |
Carla | w_2015 | 600 |
Carla | w_2016 | 250 |
María | w_2014 | 200 |
María | w_2015 | 700 |
María | w_2016 | 900 |
#- la función pivot_longer() transforma los datos de formato ancho(wide) a formato largo(long)
df_long <- df_wide %>%
tidyr::pivot_longer(cols = 2:4,
names_to = "periodo",
values_to = "salario")
knitr::kable(df_long)
students | periodo | salario |
---|---|---|
Pedro | w_2014 | 100 |
Pedro | w_2015 | 500 |
Pedro | w_2016 | 200 |
Carla | w_2014 | 400 |
Carla | w_2015 | 600 |
Carla | w_2016 | 250 |
María | w_2014 | 200 |
María | w_2015 | 700 |
María | w_2016 | 900 |
De long a WIDE format con tidyr::pivot_wider()
¿Por qué querríamos convertirlo a formato ANCHO?
Tarea: convierte “df_long” a formato ANCHO
df_long
está en formato LARGO, pásalo a formato ANCHO
Tienes que distribuir los datos de salario en columnas: una columna para cada año
Está en formato largo:
Lo quiero en formato ancho: (con una columna para cada año)
students | w_2014 | w_2015 | w_2016 |
---|---|---|---|
Pedro | 100 | 500 | 200 |
Carla | 400 | 600 | 250 |
María | 200 | 700 | 900 |
tidyr::pivot_wider()
values_from
le tienes que decir qué columna quieres que sus valores se distribuyan entre varias columnasnames_from
le tienes que decir qué columna quieres que sus valores aparezcan como los títulos de las nuevas columnas que se crearánTarea: convierte OTRA VEZ
“df_long” a formato ANCHO
df_long
está en formato LARGO, pásalo a formato ANCHO
Tienes que distribuir los datos de salario en columnas: PERO esta vez quiero que haya una columna para cada persona (Pedro, Carla, …)
Está en formato largo:
Lo quiero en formato ancho:
(con una columna para cada PERSONA)
periodo | Pedro | Carla | María |
---|---|---|---|
w_2014 | 100 | 400 | 200 |
w_2015 | 500 | 600 | 700 |
w_2016 | 200 | 250 | 900 |
tidyr::pivot_wider()
values_from
le tienes que decir qué columna quieres que sus valores se distribuyan entre varias columnasnames_from
le tienes que decir qué columna quieres que sus valores aparezcan como los títulos de las nuevas columnas que se crearántidyr
las funciones separate()
y unite()
separate()
y unite()
nos facilitarán poder separar y unir columnaspersonajes | year |
---|---|
Pedro Navaja | 1978 |
Bob Dylan | 1941 |
Peter Pan | 1904 |
Tarea: Utilizando tidyr::separate()
personajes
en dos columnas: nombre
y apellido
personajes | year |
---|---|
Pedro Navaja | 1978 |
Bob Dylan | 1941 |
Peter Pan | 1904 |
tidyr::separate()
Tendrás que darle los valores de 3 argumentos: col
, into
y sep
en el argumento col
tienes que decir qué columna quieres separar
en into
tienes que decir qué nombres quieres que tengan las nuevas columnas
en sep
tienes que decir qué caracter separa los dos elementos
Tarea: Utilizando tidyr::unite()
nombre
y apellido
en una sola columnanombre | apellido | year |
---|---|---|
Pedro | Navaja | 1978 |
Bob | Dylan | 1941 |
Peter | Pan | 1904 |
tidyr::unite()
Tendrás que darle los valores de “3” argumentos:
en el argumento col
tienes que decir el nombre de la nueva columna que se va a crear
después tienes que decir qué columnas quieres unir
en sep
tienes que decir qué carácter separará los dos elementos que vamos a unir
(Web del curso aquí)