class: center, middle, inverse, title-slide # Tablas Pivotantes ## Ordenar datos en formato ancho y largo ### Stephanie Orellana Bello ### 2020-09-02 --- # ¿Qué veremos en la clase de hoy? 📌 - Aprenderemos las diferencias entre bases de datos en formato largo y ancho -- - Cuál es la utilidad y cuándo se justifica usar cada formato -- - Cómo pasar de un formato a otro usando funciones del paquete `tidyr` --- # ¿Cómo están ordenados nuestros datos? .pull-left[ ### Formato ancho Variables como nombres de columnas Valores en casillas <img src="img/wide.png" width="80%" style="display: block; margin: auto;" /> ] .pull-right[ ### Formato largo Nombres de variables dentro de una columna Un valor por fila <img src="img/long.png" width="70%" style="display: block; margin: auto;" /> ] --- # `pivot_longer()` y `pivot_wider()` .right-column2[ <!-- --> .quote[ **Fuente:** Tidy Animated Verbs de Garrick Aden-Buie, modificado por Mara Averick ] ] Las funciones `pivot_longer()` y `pivot_wider()` del paquete `tidyr` nos permiten transformar una planilla en formato ancho a una con formato largo y viceversa. -- Ambas tienen un funcionamiento similar, así que comprendiendo bien una, podemos deducir el uso de la otra. -- 🚩 **Debemos tener siempre claro dónde están nuestras variables y valores y dónde queremos que estos estén después de la transformación.** --- class: center, middle # ¡Vamos a ver cómo! 🐧 --- # ¡A practicar! 🧪 El argumento **`names_sep = "...."`** sirve cuando tenemos nombres con variables separadas por un caracter. Rellena el siguiente código para obtener tres columnas a partir del nombre de las columnas seleccionadas. ```r library(datos) library(tidyr) pivot_longer( data = pinguinos, cols = largo_pico_mm:masa_corporal_g, * names_to = _________, * ________ = "valor", * names_sep = _______ ) ``` --- # Respuesta ```r library(datos) library(tidyr) pivot_longer( data = pinguinos, cols = largo_pico_mm:masa_corporal_g, names_to = c("variable", "estructura", "unidad"), values_to = "valor", names_sep = "_" ) ``` ``` ## # A tibble: 1,376 x 8 ## especie isla sexo anio variable estructura unidad valor ## <fct> <fct> <fct> <int> <chr> <chr> <chr> <dbl> ## 1 Adelia Torgersen macho 2007 largo pico mm 39.1 ## 2 Adelia Torgersen macho 2007 alto pico mm 18.7 ## 3 Adelia Torgersen macho 2007 largo aleta mm 181 ## 4 Adelia Torgersen macho 2007 masa corporal g 3750 ## 5 Adelia Torgersen hembra 2007 largo pico mm 39.5 ## 6 Adelia Torgersen hembra 2007 alto pico mm 17.4 ## 7 Adelia Torgersen hembra 2007 largo aleta mm 186 ## 8 Adelia Torgersen hembra 2007 masa corporal g 3800 ## 9 Adelia Torgersen hembra 2007 largo pico mm 40.3 ## 10 Adelia Torgersen hembra 2007 alto pico mm 18 ## # ... with 1,366 more rows ``` --- # `pivot_wider()` 💡 Para usar `pivot_wider()` debemos pensar en la lógica inversa y utilizar **from** en vez de **to**. La siguiente es una tabla que resume los promedios anuales para cada variable: ```r media_anual ``` ``` ## # A tibble: 12 x 3 ## # Groups: anio [3] ## anio variable media ## <int> <chr> <dbl> ## 1 2007 alto_pico_mm 17.4 ## 2 2007 largo_aleta_mm 197. ## 3 2007 largo_pico_mm 43.7 ## 4 2007 masa_corporal_g 4125. ## 5 2008 alto_pico_mm 16.9 ## # ... with 7 more rows ``` **¿Puedes inferir el resultado de la función?** ```r pivot_wider(media_anual, names_from = "anio", values_from = "media") ``` --- # Respuesta ```r pivot_wider(media_anual, names_from = "anio", values_from = "media") ``` ``` ## # A tibble: 4 x 4 ## variable `2007` `2008` `2009` ## <chr> <dbl> <dbl> <dbl> ## 1 alto_pico_mm 17.4 16.9 17.1 ## 2 largo_aleta_mm 197. 203. 203. ## 3 largo_pico_mm 43.7 43.5 44.5 ## 4 masa_corporal_g 4125. 4267. 4210. ``` --- class: middle, center # ¡Gracias! 🐧