class: inverse, center # <svg style="height:0.8em;top:.04em;position:relative;fill:steelblue;" viewBox="0 0 581 512"><path d="M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z"/></svg> para análisis de datos 🚀<br> <br> ## 🔧Manipulación de datos 💻<br> <br> <br> .large[Roxana N. Villafañe | LEMyP | <a href='http://twitter.com/data_datum'><svg style="height:0.8em;top:.04em;position:relative;fill:steelblue;" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> @data_datum</a>] <br> .large[Florencia D'Andrea | INTA-CONICET | <a href="http://twitter.com/cantoflor_87"> <svg style="height:0.8em;top:.04em;position:relative;fill:steelblue;" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> @cantoflor_87</a><br>] ✨ <br> Página web del curso en <https://flor14.github.io/Curso_r_unne_2020/> 🌟 --- # Flujo de Ciencia de Datos 📌 <img src="img/flujo-ciencia-datos-dplyr.png" width="100%" align="center" /> --- <img src="img/tibble.png" width="10%" align="right" /> # data.frame vs. tibble - data.frame es una estructura nativas de __rbase__ y está disponible sin necesidad de instalar ningún paquete adicional. Es una estructura tabular organizada en filas y columnas. Se puede acceder a las columnas mediantes colnames() y los nombres de las filas, como rownames(). <br> - tibble, sin embargo, es parte de __tidyverse__. También presenta una estructura tabular, en filas y columnas. Los tibbles eliminan los rownames por defecto, para tener mejor compatibilidad con bases de datos SQL. <br> - Ambas formas son intercambiables mediante los comandos ```r rbase::as.data.frame() tidyverse::as_tibble() ``` --- class: inverse, center <img src="img/tidyr-logo.png" width="50%" align="center" /> # `Ordenar datos con tidyr` --- background-image: url(img/fondo-madera.png) background-size: cover class: center, middle # Datos ordenados Cuando hablamos de datos ordenados son referimos a: ### 1. Cada línea es una observación ### 2. Cada columna es una variable ### 3. Cada unidad de experimentación está en una tabla separada .footnote[https://vita.had.co.nz/papers/tidy-data.pdf] --- background-image: url(img/fondo-madera.png) background-size: cover class: center, middle # Ordenando datos desordenados ### 1. Los títulos de las columnas son números, no variables ### 2. Múltiples variables están guardadas en una columna. ### 3. Las variables están guardadas en filas y columnas. ### 4. Múltiples unidades de experimentación en la misma tabla. ### 5. Una única unidad de experimentación en diferentes tablas. .footnote[https://vita.had.co.nz/papers/tidy-data.pdf] --- <img src="img/tidyr-logo.png" width="10%" align="right" /> # Funciones principales de tidyr ## pivot_longer() _antes spread()_ -- ## pivot_wider() _antes gather()_ -- ## unite() ## separate() --- <img src="img/tidyr-logo.png" width="10%" align="right" /> ### Cuando los nombres de las columnas no representan nombres de las variables, sino números -- ## `pivot_longer()` -- ```r pivot_longer(data, #dataset cols, #columnas para reordenar names_to = "xxx", #a partir de columnas colapsadas values_to = "yyy") #a partir de datos en celdas ``` .footnote[[*] Mas información en https://tidyr.tidyverse.org/reference/pivot_longer.html ] --- <img src="img/tidyr-logo.png" width="10%" align="right" /> ```r library(tidyr) head(relig_income) #encabezado del dataset ``` ``` ## # A tibble: 6 x 11 ## religion `<$10k` `$10-20k` `$20-30k` `$30-40k` `$40-50k` `$50-75k` `$75-100k` ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Agnostic 27 34 60 81 76 137 122 ## 2 Atheist 12 27 37 52 35 70 73 ## 3 Buddhist 27 21 30 34 33 58 62 ## 4 Catholic 418 617 732 670 638 1116 949 ## 5 Don’t k… 15 14 15 11 10 35 21 ## 6 Evangel… 575 869 1064 982 881 1486 949 ## # … with 3 more variables: `$100-150k` <dbl>, `>150k` <dbl>, `Don't ## # know/refused` <dbl> ``` --- <img src="img/tidyr-logo.png" width="10%" align="right" /> ## `pivot_longer()` ```r relig_income %>% #datos para ordenar pivot_longer(-religion, #columnas para reordenar names_to = "income", #columnas colapsadas values_to = "count") #el conteo de los casos ``` ``` ## # A tibble: 180 x 3 ## religion income count ## <chr> <chr> <dbl> ## 1 Agnostic <$10k 27 ## 2 Agnostic $10-20k 34 ## 3 Agnostic $20-30k 60 ## 4 Agnostic $30-40k 81 ## 5 Agnostic $40-50k 76 ## 6 Agnostic $50-75k 137 ## 7 Agnostic $75-100k 122 ## 8 Agnostic $100-150k 109 ## 9 Agnostic >150k 84 ## 10 Agnostic Don't know/refused 96 ## # … with 170 more rows ``` --- <img src="img/tidyr-logo.png" width="10%" align="right" /> ### Multiples variables están en una sola columna #### (esas variables pasarán a ser las nuevas columnas) -- ## `pivot_wider()` -- ```r pivot_wider(data, #dataset names_from = #de donde se crean las columnas values_from = #de donde obtengo los valores) ``` .footnote[[*] Mas información en https://tidyr.tidyverse.org/reference/pivot_wider.html ] --- <img src="img/tidyr-logo.png" width="10%" align="right" /> ```r fish_encounters ``` ``` ## # A tibble: 114 x 3 ## fish station seen ## <fct> <fct> <int> ## 1 4842 Release 1 ## 2 4842 I80_1 1 ## 3 4842 Lisbon 1 ## 4 4842 Rstr 1 ## 5 4842 Base_TD 1 ## 6 4842 BCE 1 ## 7 4842 BCW 1 ## 8 4842 BCE2 1 ## 9 4842 BCW2 1 ## 10 4842 MAE 1 ## # … with 104 more rows ``` --- <img src="img/tidyr-logo.png" width="10%" align="right" /> ```r fish_encounters %>% #ingreso de los datos pivot_wider(names_from = station, values_from = seen) ``` ``` ## # A tibble: 19 x 12 ## fish Release I80_1 Lisbon Rstr Base_TD BCE BCW BCE2 BCW2 MAE MAW ## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> ## 1 4842 1 1 1 1 1 1 1 1 1 1 1 ## 2 4843 1 1 1 1 1 1 1 1 1 1 1 ## 3 4844 1 1 1 1 1 1 1 1 1 1 1 ## 4 4845 1 1 1 1 1 NA NA NA NA NA NA ## 5 4847 1 1 1 NA NA NA NA NA NA NA NA ## 6 4848 1 1 1 1 NA NA NA NA NA NA NA ## 7 4849 1 1 NA NA NA NA NA NA NA NA NA ## 8 4850 1 1 NA 1 1 1 1 NA NA NA NA ## 9 4851 1 1 NA NA NA NA NA NA NA NA NA ## 10 4854 1 1 NA NA NA NA NA NA NA NA NA ## 11 4855 1 1 1 1 1 NA NA NA NA NA NA ## 12 4857 1 1 1 1 1 1 1 1 1 NA NA ## 13 4858 1 1 1 1 1 1 1 1 1 1 1 ## 14 4859 1 1 1 1 1 NA NA NA NA NA NA ## 15 4861 1 1 1 1 1 1 1 1 1 1 1 ## 16 4862 1 1 1 1 1 1 1 1 1 NA NA ## 17 4863 1 1 NA NA NA NA NA NA NA NA NA ## 18 4864 1 1 NA NA NA NA NA NA NA NA NA ## 19 4865 1 1 1 NA NA NA NA NA NA NA NA ``` --- background-image: url(img/dplyr-fondo.png) background-size: cover class: center, middle # `pivot_longer()` # y # `pivot_wider()` # son operaciones inversas --- background-image: url(img/textura-fondo.png) background-size: cover class: center, middle, inverse # 🔧 DEMO 💻 --- class: center, middle # 💡 # Consigna ## 1. Pasar los objetos `relig2` y `fish2` a su formato original aplicando la función inversa (`pivot_longer` y `pivot_wider`) en cada caso. --- <img src="img/tidyr-logo.png" width="10%" align="right" /> # Solución 1 *parte1* ```r library(tidyr) relig2<-relig_income %>% #datos para ordenar pivot_longer(-religion, #columnas para reordenar names_to = "income", #columnas colapsadas values_to = "count") relig2 ``` ``` ## # A tibble: 180 x 3 ## religion income count ## <chr> <chr> <dbl> ## 1 Agnostic <$10k 27 ## 2 Agnostic $10-20k 34 ## 3 Agnostic $20-30k 60 ## 4 Agnostic $30-40k 81 ## 5 Agnostic $40-50k 76 ## 6 Agnostic $50-75k 137 ## 7 Agnostic $75-100k 122 ## 8 Agnostic $100-150k 109 ## 9 Agnostic >150k 84 ## 10 Agnostic Don't know/refused 96 ## # … with 170 more rows ``` --- <img src="img/tidyr-logo.png" width="10%" align="right" /> *parte2* ```r relig<-relig2 %>% pivot_wider(names_from= income, values_from=count) relig ``` ``` ## # A tibble: 18 x 11 ## religion `<$10k` `$10-20k` `$20-30k` `$30-40k` `$40-50k` `$50-75k` `$75-100k` ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 Agnostic 27 34 60 81 76 137 122 ## 2 Atheist 12 27 37 52 35 70 73 ## 3 Buddhist 27 21 30 34 33 58 62 ## 4 Catholic 418 617 732 670 638 1116 949 ## 5 Don’t k… 15 14 15 11 10 35 21 ## 6 Evangel… 575 869 1064 982 881 1486 949 ## 7 Hindu 1 9 7 9 11 34 47 ## 8 Histori… 228 244 236 238 197 223 131 ## 9 Jehovah… 20 27 24 24 21 30 15 ## 10 Jewish 19 19 25 25 30 95 69 ## 11 Mainlin… 289 495 619 655 651 1107 939 ## 12 Mormon 29 40 48 51 56 112 85 ## 13 Muslim 6 7 9 10 9 23 16 ## 14 Orthodox 13 17 23 32 32 47 38 ## 15 Other C… 9 7 11 13 13 14 18 ## 16 Other F… 20 33 40 46 49 63 46 ## 17 Other W… 5 2 3 4 2 7 3 ## 18 Unaffil… 217 299 374 365 341 528 407 ## # … with 3 more variables: `$100-150k` <dbl>, `>150k` <dbl>, `Don't ## # know/refused` <dbl> ``` --- <img src="img/tidyr-logo.png" width="10%" align="right" /> # Solución *parte 1* ```r fish2<-fish_encounters %>% #ingreso de los datos pivot_wider(names_from = station, values_from = seen) fish2 ``` ``` ## # A tibble: 19 x 12 ## fish Release I80_1 Lisbon Rstr Base_TD BCE BCW BCE2 BCW2 MAE MAW ## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> ## 1 4842 1 1 1 1 1 1 1 1 1 1 1 ## 2 4843 1 1 1 1 1 1 1 1 1 1 1 ## 3 4844 1 1 1 1 1 1 1 1 1 1 1 ## 4 4845 1 1 1 1 1 NA NA NA NA NA NA ## 5 4847 1 1 1 NA NA NA NA NA NA NA NA ## 6 4848 1 1 1 1 NA NA NA NA NA NA NA ## 7 4849 1 1 NA NA NA NA NA NA NA NA NA ## 8 4850 1 1 NA 1 1 1 1 NA NA NA NA ## 9 4851 1 1 NA NA NA NA NA NA NA NA NA ## 10 4854 1 1 NA NA NA NA NA NA NA NA NA ## 11 4855 1 1 1 1 1 NA NA NA NA NA NA ## 12 4857 1 1 1 1 1 1 1 1 1 NA NA ## 13 4858 1 1 1 1 1 1 1 1 1 1 1 ## 14 4859 1 1 1 1 1 NA NA NA NA NA NA ## 15 4861 1 1 1 1 1 1 1 1 1 1 1 ## 16 4862 1 1 1 1 1 1 1 1 1 NA NA ## 17 4863 1 1 NA NA NA NA NA NA NA NA NA ## 18 4864 1 1 NA NA NA NA NA NA NA NA NA ## 19 4865 1 1 1 NA NA NA NA NA NA NA NA ``` --- <img src="img/tidyr-logo.png" width="10%" align="right" /> # Solución *parte 2* ```r fish<-fish2%>% pivot_longer(-fish,names_to="station", values_to="seen")%>% na.omit() #elimino valores perdidos fish ``` ``` ## # A tibble: 114 x 3 ## fish station seen ## <fct> <chr> <int> ## 1 4842 Release 1 ## 2 4842 I80_1 1 ## 3 4842 Lisbon 1 ## 4 4842 Rstr 1 ## 5 4842 Base_TD 1 ## 6 4842 BCE 1 ## 7 4842 BCW 1 ## 8 4842 BCE2 1 ## 9 4842 BCW2 1 ## 10 4842 MAE 1 ## # … with 104 more rows ``` --- <img src="img/tidyr-logo.png" width="10%" align="right" /> # `separate()` * Lo utilizamos para separar columnas ```r storms<-EDAWR::storms storms ``` ``` ## storm wind pressure date ## 1 Alberto 110 1007 2000-08-03 ## 2 Alex 45 1009 1998-07-27 ## 3 Allison 65 1005 1995-06-03 ## 4 Ana 40 1013 1997-06-30 ## 5 Arlene 50 1010 1999-06-11 ## 6 Arthur 45 1010 1996-06-17 ``` .footnote[[*] Mas información en https://github.com/rstudio/EDAWR] --- <img src="img/tidyr-logo.png" width="10%" align="right" /> <br> <br> ```r library(tidyr) str2<- #creo un objeto de R storms %>% # a partir del dataset ´storms` separate(`date`, #la columna `date` c("year", "month", "day"), sep="-") # divido en 3 str2 #invoco el objeto creado ``` ``` ## # A tibble: 6 x 6 ## storm wind pressure year month day ## <chr> <int> <int> <chr> <chr> <chr> ## 1 Alberto 110 1007 2000 08 03 ## 2 Alex 45 1009 1998 07 27 ## 3 Allison 65 1005 1995 06 03 ## 4 Ana 40 1013 1997 06 30 ## 5 Arlene 50 1010 1999 06 11 ## 6 Arthur 45 1010 1996 06 17 ``` --- <img src="img/tidyr-logo.png" width="10%" align="right" /> # unite() * Lo utilizamos para unir columnas ```r str3 <- str2 %>% #objeto creado anteriormente unite("date", #se crea la columna `date` year, month, day, sep="-") #a partir de otras tres str3 ``` ``` ## # A tibble: 6 x 4 ## storm wind pressure date ## <chr> <int> <int> <chr> ## 1 Alberto 110 1007 2000-08-03 ## 2 Alex 45 1009 1998-07-27 ## 3 Allison 65 1005 1995-06-03 ## 4 Ana 40 1013 1997-06-30 ## 5 Arlene 50 1010 1999-06-11 ## 6 Arthur 45 1010 1996-06-17 ``` --- background-image: url(img/dplyr-fondo.png) background-size: cover class: center, middle # `unite()` # y # `separate()` # son operaciones inversas --- background-image: url(img/dplyr-fondo.png) background-size: cover class: center, middle # Objetivo Principal de `tidyr()`: # Obtener datos ordeandos --- class: center, middle # 🔍 # Funciones Útiles # (para explorar datos) --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # Dataset: gapminder ```r install.packages(gapminder) ``` ```r library(gapminder) ``` <table> <thead> <tr> <th style="text-align:left;"> variable </th> <th style="text-align:left;"> significado </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> country </td> <td style="text-align:left;"> país </td> </tr> <tr> <td style="text-align:left;"> continent </td> <td style="text-align:left;"> continente </td> </tr> <tr> <td style="text-align:left;"> year </td> <td style="text-align:left;"> año </td> </tr> <tr> <td style="text-align:left;"> lifeExp </td> <td style="text-align:left;"> expectativa de vida </td> </tr> <tr> <td style="text-align:left;"> pop </td> <td style="text-align:left;"> población </td> </tr> <tr> <td style="text-align:left;"> gdpPercap </td> <td style="text-align:left;"> PBIpercápita </td> </tr> </tbody> </table> .footnote[https://github.com/jennybc/gapminder] --- ``` ## NULL ``` --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # Funciones útiles -- __Me permite visualizar los seis (6) primeros casos por del set de datos__ -- ## `head()` ```r head(gapminder) ``` ``` ## # A tibble: 6 x 6 ## country continent year lifeExp pop gdpPercap ## <fct> <fct> <int> <dbl> <int> <dbl> ## 1 Afghanistan Asia 1952 28.8 8425333 779. ## 2 Afghanistan Asia 1957 30.3 9240934 821. ## 3 Afghanistan Asia 1962 32.0 10267083 853. ## 4 Afghanistan Asia 1967 34.0 11537966 836. ## 5 Afghanistan Asia 1972 36.1 13079460 740. ## 6 Afghanistan Asia 1977 38.4 14880372 786. ``` --- <img src="img/hex-dplyr.png" width="10%" align="right" /> #Funciones Útiles -- __Nos permite conocer los seis (6) últimos casos del set de datos__ -- ## `tail()` ```r tail(gapminder) ``` ``` ## # A tibble: 6 x 6 ## country continent year lifeExp pop gdpPercap ## <fct> <fct> <int> <dbl> <int> <dbl> ## 1 Zimbabwe Africa 1982 60.4 7636524 789. ## 2 Zimbabwe Africa 1987 62.4 9216418 706. ## 3 Zimbabwe Africa 1992 60.4 10704340 693. ## 4 Zimbabwe Africa 1997 46.8 11404948 792. ## 5 Zimbabwe Africa 2002 40.0 11926563 672. ## 6 Zimbabwe Africa 2007 43.5 12311143 470. ``` --- <img src="img/hex-dplyr.png" width="10%" align="right" /> #Funciones Útiles -- __Nos permite conocer el número de datos (filas y columnas), variables, tipo de variables, etc__ -- ## `glimpse()` ```r dplyr::glimpse(gapminder) ``` ``` ## Rows: 1,704 ## Columns: 6 ## $ country <fct> Afghanistan, Afghanistan, Afghanistan, Afghanistan, Afghani… ## $ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia,… ## $ year <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997,… ## $ lifeExp <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.… ## $ pop <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 1… ## $ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134,… ``` --- <img src="img/hex-dplyr.png" width="10%" align="right" /> #Funciones Útiles -- __Nos permite extraer una fila teniendo en cuenta el index(orden) de la muestra__ -- ## `slice()` ```r dplyr::slice(gapminder, 5L) ``` ``` ## # A tibble: 1 x 6 ## country continent year lifeExp pop gdpPercap ## <fct> <fct> <int> <dbl> <int> <dbl> ## 1 Afghanistan Asia 1972 36.1 13079460 740. ``` --- <img src="img/hex-dplyr.png" width="10%" align="right" /> #Funciones Útiles -- __Nos permite conocer la estructura interna del set de datos__ -- ## `str()` ```r str(gapminder) ``` ``` ## tibble [1,704 × 6] (S3: tbl_df/tbl/data.frame) ## $ country : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ... ## $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ... ## $ year : int [1:1704] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ... ## $ lifeExp : num [1:1704] 28.8 30.3 32 34 36.1 ... ## $ pop : int [1:1704] 8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ... ## $ gdpPercap: num [1:1704] 779 821 853 836 740 ... ``` .footnote[https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/str] --- <img src="img/hex-dplyr.png" width="10%" align="right" /> #Funciones Útiles -- __Nos permite conocer la estadística descriptiva del conjunto de datos__ -- ## `summary()` ```r summary(gapminder) ``` ``` ## country continent year lifeExp ## Afghanistan: 12 Africa :624 Min. :1952 Min. :23.60 ## Albania : 12 Americas:300 1st Qu.:1966 1st Qu.:48.20 ## Algeria : 12 Asia :396 Median :1980 Median :60.71 ## Angola : 12 Europe :360 Mean :1980 Mean :59.47 ## Argentina : 12 Oceania : 24 3rd Qu.:1993 3rd Qu.:70.85 ## Australia : 12 Max. :2007 Max. :82.60 ## (Other) :1632 ## pop gdpPercap ## Min. :6.001e+04 Min. : 241.2 ## 1st Qu.:2.794e+06 1st Qu.: 1202.1 ## Median :7.024e+06 Median : 3531.8 ## Mean :2.960e+07 Mean : 7215.3 ## 3rd Qu.:1.959e+07 3rd Qu.: 9325.5 ## Max. :1.319e+09 Max. :113523.1 ## ``` --- class: inverse, center <img src="img/hex-dplyr.png" width="40%" align="center" /> # `Manipular datos con dplyr` --- background-image: url(img/dplyr-fondo2.png) background-size: cover class: center, middle # Si quisiese trabajar con algunas columnas... --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `select()` -- __¿Cómo selecciono las variables "país", "expectativa de vida" e "ingreso percápita"?__ -- * La función select() nos permite extraer columnas ```r library(dplyr) gapminder %>% #datos para trabajar `select`(country, lifeExp, gdpPercap) %>% #elijo columnas head(5) #encabezado con los 6 primeros casos ``` ``` ## # A tibble: 5 x 3 ## country lifeExp gdpPercap ## <fct> <dbl> <dbl> ## 1 Afghanistan 28.8 779. ## 2 Afghanistan 30.3 821. ## 3 Afghanistan 32.0 853. ## 4 Afghanistan 34.0 836. ## 5 Afghanistan 36.1 740. ``` .footnote[[*] Mas información en https://dplyr.tidyverse.org/reference/select.html] --- background-image: url(img/dplyr-fondo2.png) background-size: cover class: center, middle # Si quisiese trabajar con algunas filas... --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `filter()` -- __¿Cuáles son los países con expectativa de vida mayor a 80 años?__ -- * La función filter() nos permite extraer filas mediante un criterio lógico Para ello utilizamos los siguientes operadores: >, >=, <, =<, ==, != ```r gapminder %>% #datos para trabajar `filter`(lifeExp > 80) %>% #filas con expectativa mayor a 80 años head(3) #encabezado de 3 primeros casos ``` ``` ## # A tibble: 3 x 6 ## country continent year lifeExp pop gdpPercap ## <fct> <fct> <int> <dbl> <int> <dbl> ## 1 Australia Oceania 2002 80.4 19546792 30688. ## 2 Australia Oceania 2007 81.2 20434176 34435. ## 3 Canada Americas 2007 80.7 33390141 36319. ``` .footnote[[*] Mas información en https://dplyr.tidyverse.org/reference/filter.html] --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `filter()` Podemos filtrar según múltiples condiciones: - Se cumplen ambas condiciones ```r filter(condicion1`,` condicion2) ``` - Se cumple la condición 1 solamente ```r filter(condicion1, `!`condicion2) #niego la segunda condición ``` - Se cumplen la condición 1 y/ o la condición 2 ```r filter(condicion1 `|` condicion2) ``` - Se cumple una u otra condición, pero no ambas (disyunción exclusiva) ```r filter(`xor`(condicion1, condicion2)) ``` --- background-image: url(img/textura-fondo.png) background-size: cover class: center, middle, inverse # 🔧 DEMO 💻 --- class: center, middle # 💡 # Consigna # Del dataset `gapminder` selecciono las columnas `country`, `lifeExp`, `year`, `pop` y `gdpPercap`, pero sólo de los casos de Argentina --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # Solución ```r library(gapminder) library(dplyr) gapminder%>% select(-continent)%>% filter(country=="Argentina") ``` ``` ## # A tibble: 12 x 5 ## country year lifeExp pop gdpPercap ## <fct> <int> <dbl> <int> <dbl> ## 1 Argentina 1952 62.5 17876956 5911. ## 2 Argentina 1957 64.4 19610538 6857. ## 3 Argentina 1962 65.1 21283783 7133. ## 4 Argentina 1967 65.6 22934225 8053. ## 5 Argentina 1972 67.1 24779799 9443. ## 6 Argentina 1977 68.5 26983828 10079. ## 7 Argentina 1982 69.9 29341374 8998. ## 8 Argentina 1987 70.8 31620918 9140. ## 9 Argentina 1992 71.9 33958947 9308. ## 10 Argentina 1997 73.3 36203463 10967. ## 11 Argentina 2002 74.3 38331121 8798. ## 12 Argentina 2007 75.3 40301927 12779. ``` --- background-image: url(img/dplyr-fondo.png) background-size: cover class: center, middle # `select()`: extraer columnas # `filter()`: extraer filas siguiendo una condición lógica --- background-image: url(img/dplyr-fondo2.png) background-size: cover class: center, middle # Si quisiese crear una nueva variable... --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `mutate()` -- __¿Cómo puedo conocer el PBI a partir de la población y el PBIpercápita?__ -- * Permite crear nuevas variables a partir de una operación ```r gapminder %>% `mutate`(gdp = pop * gdpPercap) %>% #creo columna `gdp` head() ``` ``` ## # A tibble: 6 x 7 ## country continent year lifeExp pop gdpPercap gdp ## <fct> <fct> <int> <dbl> <int> <dbl> <dbl> ## 1 Afghanistan Asia 1952 28.8 8425333 779. 6567086330. ## 2 Afghanistan Asia 1957 30.3 9240934 821. 7585448670. ## 3 Afghanistan Asia 1962 32.0 10267083 853. 8758855797. ## 4 Afghanistan Asia 1967 34.0 11537966 836. 9648014150. ## 5 Afghanistan Asia 1972 36.1 13079460 740. 9678553274. ## 6 Afghanistan Asia 1977 38.4 14880372 786. 11697659231. ``` .footnote[[*] Más información en https://dplyr.tidyverse.org/reference/mutate.html] --- background-image: url(img/dplyr-fondo2.png) background-size: cover class: center, middle # Si quisiese ordenar de menor a mayor los valores de una variable --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `arrange()` -- __¿Cuáles son los países con menor expectativa de vida?__ -- * Permite ordenar filas según una variable ```r gapminder %>% `arrange`(lifeExp) %>% #ordeno según expectativa de vida head(4) ``` ``` ## # A tibble: 4 x 6 ## country continent year lifeExp pop gdpPercap ## <fct> <fct> <int> <dbl> <int> <dbl> ## 1 Rwanda Africa 1992 23.6 7290203 737. ## 2 Afghanistan Asia 1952 28.8 8425333 779. ## 3 Gambia Africa 1952 30 284320 485. ## 4 Angola Africa 1952 30.0 4232095 3521. ``` .footnote[[*] Más información en https://dplyr.tidyverse.org/reference/arrange.html] --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `arrange(desc())` -- __¿Cuáles son los países con mayor expectativa de vida?__ -- - Podemos reordenarlos de manera descendente. ```r gapminder %>% arrange(desc(lifeExp)) ``` ``` ## # A tibble: 1,704 x 6 ## country continent year lifeExp pop gdpPercap ## <fct> <fct> <int> <dbl> <int> <dbl> ## 1 Japan Asia 2007 82.6 127467972 31656. ## 2 Hong Kong, China Asia 2007 82.2 6980412 39725. ## 3 Japan Asia 2002 82 127065841 28605. ## 4 Iceland Europe 2007 81.8 301931 36181. ## 5 Switzerland Europe 2007 81.7 7554661 37506. ## 6 Hong Kong, China Asia 2002 81.5 6762476 30209. ## 7 Australia Oceania 2007 81.2 20434176 34435. ## 8 Spain Europe 2007 80.9 40448191 28821. ## 9 Sweden Europe 2007 80.9 9031088 33860. ## 10 Israel Asia 2007 80.7 6426679 25523. ## # … with 1,694 more rows ``` --- background-image: url(img/textura-fondo.png) background-size: cover class: center, middle, inverse # 🔧 DEMO 💻 --- class: center, middle # 💡 # Consigna # Cree una columna llamada `PBI`, y ordenelos según expectativa de vida en los casos de Argentina. --- <img src="img/hex-dplyr.png" width="10%" align="right" /> ```r library(gapminder) library(dplyr) gapminder %>% mutate(gdp= pop * gdpPercap) %>% filter(country=="Argentina") %>% arrange(desc(lifeExp)) ``` ``` ## # A tibble: 12 x 7 ## country continent year lifeExp pop gdpPercap gdp ## <fct> <fct> <int> <dbl> <int> <dbl> <dbl> ## 1 Argentina Americas 2007 75.3 40301927 12779. 515033625357. ## 2 Argentina Americas 2002 74.3 38331121 8798. 337223430800. ## 3 Argentina Americas 1997 73.3 36203463 10967. 397053586287. ## 4 Argentina Americas 1992 71.9 33958947 9308. 316104097627. ## 5 Argentina Americas 1987 70.8 31620918 9140. 289004799539. ## 6 Argentina Americas 1982 69.9 29341374 8998. 264010673179. ## 7 Argentina Americas 1977 68.5 26983828 10079. 271970723960. ## 8 Argentina Americas 1972 67.1 24779799 9443. 233996596624. ## 9 Argentina Americas 1967 65.6 22934225 8053. 184688236498. ## 10 Argentina Americas 1962 65.1 21283783 7133. 151820757737. ## 11 Argentina Americas 1957 64.4 19610538 6857. 134466639306. ## 12 Argentina Americas 1952 62.5 17876956 5911. 105676319105. ``` --- background-image: url(img/dplyr-fondo.png) background-size: cover class: center, middle # `mutate()`: crea nuevas variables a partir de una operación # `arrange()`: ordenar filas por variables --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `group_by()` y `summarize()` -- __¿Cómo puedo conocer la media del PBIpercápita por continente?__ -- ```r gdp_bycontinents <- gapminder %>% `group_by`(continent) %>% #agrupo por continentes `summarize`(mean_gdpPercap=mean(gdpPercap)) #resumo gdp_bycontinents ``` ``` ## # A tibble: 5 x 2 ## continent mean_gdpPercap ## <fct> <dbl> ## 1 Africa 2194. ## 2 Americas 7136. ## 3 Asia 7902. ## 4 Europe 14469. ## 5 Oceania 18622. ``` .footnote[[*] Más información en https://dplyr.tidyverse.org/reference/summarise.html] --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `data %>% group_by(a)` <img src="img/group_by.png" width="100%" align="center" /> .footnote[[*] Ejemplo tomado de https://swcarpentry.github.io/r-novice-gapminder-es/13-dplyr/] --- <img src="img/hex-dplyr.png" width="10%" align="right" /> # `data %>% group_by(a) %>% summarize(b)` <img src="img/summarise.png" width="100%" align="center" /> .footnote[[*] Ejemplo tomado de https://swcarpentry.github.io/r-novice-gapminder-es/13-dplyr/] --- background-image: url(img/textura-fondo.png) background-size: cover class: center, middle, inverse # 🔧 DEMO 💻 --- class: center, middle # 💡 # Consigna ## 1. Calcular la media de la esperanza de vida por continente ## 2. Repetir el mismo procedimiento pero para el año 2007 que es el último año registrado --- <img src="img/hex-dplyr.png" width="10%" align="right" /> ```r gapminder %>% group_by(continent) %>% summarise(lifeExp = median(lifeExp)) ``` ``` ## # A tibble: 5 x 2 ## continent lifeExp ## <fct> <dbl> ## 1 Africa 47.8 ## 2 Americas 67.0 ## 3 Asia 61.8 ## 4 Europe 72.2 ## 5 Oceania 73.7 ``` -- ```r gapminder %>% filter(year==2007) %>% group_by(continent) %>% summarise(lifeExp = median(lifeExp)) ``` ``` ## # A tibble: 5 x 2 ## continent lifeExp ## <fct> <dbl> ## 1 Africa 52.9 ## 2 Americas 72.9 ## 3 Asia 72.4 ## 4 Europe 78.6 ## 5 Oceania 80.7 ``` --- background-image: url(img/dplyr-fondo.png) background-size: cover class: center, middle # `group_by()`: agrupar según un determinado criterio # `summarize()`: resumir cambiando la unidad de análisis --- class: middle, center ## `select()`: extraer columnas ## `filter()`: extraer filas siguiendo una condición lógica ## `mutate()`: crea nuevas variables ## `arrange()`: ordenar filas por variables ## `group_by()`: agrupar según un determinado criterio ## `summarize()`: resumir --- background-image: url(img/dplyr-fondo.png) background-size: cover class: center, middle # Objetivo de `dplyr()`: # Obtener porciones de nuestros datos (subsets) que contesten una pregunta --- background-image: url(img/textura-fondo.png) background-size: cover class: center, middle, inverse # 🔧 COFFEE BREAK 💻 --- ```r devtools::session_info() ``` ``` ## ─ Session info ─────────────────────────────────────────────────────────────── ## setting value ## version R version 3.6.3 (2020-02-29) ## os Ubuntu 20.04 LTS ## system x86_64, linux-gnu ## ui X11 ## language es_AR:es ## collate es_AR.UTF-8 ## ctype es_AR.UTF-8 ## tz America/Argentina/Cordoba ## date 2020-06-05 ## ## ─ Packages ─────────────────────────────────────────────────────────────────── ## package * version date lib source ## assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.6.3) ## backports 1.1.7 2020-05-13 [1] CRAN (R 3.6.3) ## callr 3.4.3 2020-03-28 [1] CRAN (R 3.6.3) ## cli 2.0.2 2020-02-28 [1] CRAN (R 3.6.3) ## colorspace 1.4-1 2019-03-18 [1] CRAN (R 3.6.3) ## crayon 1.3.4 2017-09-16 [1] CRAN (R 3.6.3) ## desc 1.2.0 2018-05-01 [1] CRAN (R 3.6.3) ## devtools 2.2.2 2020-02-17 [3] CRAN (R 3.6.3) ## digest 0.6.25 2020-02-23 [1] CRAN (R 3.6.3) ## dplyr * 0.8.5 2020-03-07 [1] CRAN (R 3.6.3) ## EDAWR 0.1 2020-06-06 [1] Github (rstudio/EDAWR@fbfee98) ## ellipsis 0.3.1 2020-05-15 [1] CRAN (R 3.6.3) ## emo * 0.0.0.9000 2020-05-12 [1] Github (hadley/emo@3f03b11) ## evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.3) ## fansi 0.4.1 2020-01-08 [1] CRAN (R 3.6.3) ## farver 2.0.3 2020-01-16 [1] CRAN (R 3.6.3) ## fontawesome * 0.1.0 2020-05-12 [1] Github (rstudio/fontawesome@2b64e31) ## fs 1.4.1 2020-04-04 [1] CRAN (R 3.6.3) ## gapminder * 0.3.0 2017-10-31 [1] CRAN (R 3.6.3) ## generics 0.0.2 2018-11-29 [1] CRAN (R 3.6.3) ## gganimate * 1.0.5 2020-02-09 [1] CRAN (R 3.6.3) ## ggplot2 * 3.3.1 2020-05-28 [1] CRAN (R 3.6.3) ## glue 1.4.1 2020-05-13 [1] CRAN (R 3.6.3) ## gtable 0.3.0 2019-03-25 [1] CRAN (R 3.6.3) ## highr 0.8 2019-03-20 [1] CRAN (R 3.6.3) ## hms 0.5.3 2020-01-08 [1] CRAN (R 3.6.3) ## htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.3) ## knitr 1.28 2020-02-06 [1] CRAN (R 3.6.3) ## lifecycle 0.2.0 2020-03-06 [1] CRAN (R 3.6.3) ## lubridate 1.7.8 2020-04-06 [1] CRAN (R 3.6.3) ## magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.3) ## memoise 1.1.0 2017-04-21 [3] CRAN (R 3.5.0) ## munsell 0.5.0 2018-06-12 [1] CRAN (R 3.6.3) ## pillar 1.4.4 2020-05-05 [1] CRAN (R 3.6.3) ## pkgbuild 1.0.8 2020-05-07 [1] CRAN (R 3.6.3) ## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.3) ## pkgload 1.1.0 2020-05-29 [1] CRAN (R 3.6.3) ## prettyunits 1.1.1 2020-01-24 [1] CRAN (R 3.6.3) ## processx 3.4.2 2020-02-09 [1] CRAN (R 3.6.3) ## progress 1.2.2 2019-05-16 [1] CRAN (R 3.6.3) ## ps 1.3.3 2020-05-08 [1] CRAN (R 3.6.3) ## purrr 0.3.4 2020-04-17 [1] CRAN (R 3.6.3) ## R6 2.4.1 2019-11-12 [1] CRAN (R 3.6.3) ## Rcpp 1.0.4.6 2020-04-09 [1] CRAN (R 3.6.3) ## remotes 2.1.1 2020-02-15 [1] CRAN (R 3.6.3) ## rlang 0.4.6 2020-05-02 [1] CRAN (R 3.6.3) ## rmarkdown 2.1 2020-01-20 [1] CRAN (R 3.6.3) ## rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.6.3) ## scales 1.1.1 2020-05-11 [1] CRAN (R 3.6.3) ## sessioninfo 1.1.1 2018-11-05 [3] CRAN (R 3.5.1) ## stringi 1.4.6 2020-02-17 [1] CRAN (R 3.6.3) ## stringr 1.4.0 2019-02-10 [1] CRAN (R 3.6.3) ## testthat 2.3.2 2020-03-02 [1] CRAN (R 3.6.3) ## tibble 3.0.1 2020-04-20 [1] CRAN (R 3.6.3) ## tidyr * 1.0.2 2020-01-24 [1] CRAN (R 3.6.3) ## tidyselect 1.0.0 2020-01-27 [1] CRAN (R 3.6.3) ## tweenr 1.0.1 2018-12-14 [1] CRAN (R 3.6.3) ## usethis 1.5.1 2019-07-04 [3] CRAN (R 3.6.2) ## utf8 1.1.4 2018-05-24 [1] CRAN (R 3.6.3) ## vctrs 0.3.1 2020-06-05 [1] CRAN (R 3.6.3) ## withr 2.2.0 2020-04-20 [1] CRAN (R 3.6.3) ## xaringan 0.16 2020-03-31 [1] CRAN (R 3.6.3) ## xfun 0.13 2020-04-13 [1] CRAN (R 3.6.3) ## yaml 2.2.1 2020-02-01 [1] CRAN (R 3.6.3) ## ## [1] /home/roxana/R/x86_64-pc-linux-gnu-library/3.6 ## [2] /usr/local/lib/R/site-library ## [3] /usr/lib/R/site-library ## [4] /usr/lib/R/library ```