class: title-slide, inverse, bottom background-image: url(https://images.unsplash.com/photo-1487235829740-e0ac5a286e1c?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1496&q=80) background-size: cover # Recorriendo el Tidyverse con las R-Ladies ## R-Ladies Madrid ### María Paula Caldas ### 2020-10-19 .right[ Foto de [Octavian Rosca](https://unsplash.com/photos/UfCYo7zHyY8) ] --- class: about-me, right, bottom <img style="border-radius: 50%;" src="https://github.com/mpaulacaldas.png" width="150px"/> ## María Paula Caldas <!-- ### Postdoctoral Research Scientist --> <!-- ### University of Pennsylvania, Philadelphia, PA, USA --> [
mpaulacaldas.com](https://mpaulacaldas.com)<br/> [
mapaulacaldas](https://twitter.com/mapaulacaldas)<br/> [
mpaulacaldas](https://github.com/mpaulacaldas)<br/> --- class: left, middle # Antes de comenzar ### Slides: <https://mpaulacaldas.github.io/rrrtidyverse> ### Código: <https://github.com/mpaulacaldas/rrrtidyverse> # Paquetes ```r # install.packages("tidyverse") library(tidyverse) library(lubridate) ``` --- ## Herramientas que usaremos hoy 📦 Los paquetes del **[tidyverse](https://www.tidyverse.org/)**, desarrollados por [RStudio](https://rstudio.com/). 🧮 Los **[datos sobre eventos de R-Ladies](https://github.com/cienciadedatos/datos-de-miercoles/tree/master/datos/2019/2019-06-26)** compartidos en [#DatosDeMiercoles](https://twitter.com/search?q=%23DatosDeMiercoles) 📖 **[R para la Ciencia de Datos](https://es.r4ds.hadley.nz/)**, la versión en español de [R for Data Science](https://r4ds.had.co.nz/) de Garrett Grolemund y Hadley Wickham, traducido por la comunidad de hispanoablante de R y coordinado por [Riva Quiroga](https://twitter.com/rivaquiroga?lang=en). <!-- TODO: Verificar nombres y vínculos --> ## Inspiración para esta presentación 🐧 Las diapositivas y su contenido se inspiran de la presentación **[An Artic Tour of the Tidyverse](https://spcanelon.github.io/tour-of-the-tidyverse/)** de [Silvia Canelón](https://twitter.com/spcanelon) para las R-Ladies Chicago. 📦 Usando los paquetes **[xaringan](https://github.com/yihui/xaringan)**, de [Yihui Xie](https://yihui.org/en/about/), **[xaringanExtra](https://github.com/gadenbuie/xaringanExtra)** de [Garrick Aden-Buie](https://twitter.com/grrrck), y el **[R-Ladies `xaringan` theme](https://alison.rbind.io/post/2017-12-18-r-ladies-presentation-ninja/)** diseñado por [Alison Presmanes Hill](https://twitter.com/apreshill). --- class: inverse, bottom, left # Parte 1 ## Importar, manipular, y encadenar --- background-image: url(https://github.com/cienciadedatos.png) background-position: 1050px 20px background-size: 110px # Datos sobre capítulos de las RLadies Estos datos fueron publicados para uno de los [#DatosDeMiercoles](https://github.com/cienciadedatos/datos-de-miercoles/tree/master/datos/2019/2019-06-26) de junio de 2019. Para esta parte del taller, utilizaremos un tablero con la información de creación de los diferentes capítulos de las R-Ladies alrededor del mundo. #### `capitulos` ``` #> # A tibble: 160 x 7 #> capitulo creacion miembros latitud longitud ciudad pais #> <chr> <dttm> <dbl> <dbl> <dbl> <chr> <chr> #> 1 R-Ladies Barc… 2016-10-22 10:56:36 389 41.4 2.17 Barcelona ES #> 2 R-Ladies Ushu… 2018-05-09 16:39:48 23 -54.8 -68.3 Ushuaia AR #> 3 R-Ladies Bilb… 2019-02-27 05:37:09 38 43.2 -2.93 Bilbao ES #> 4 R-Ladies Bari… 2018-05-10 02:22:15 114 -41.1 -71.3 San Carlos … AR #> 5 R-Ladies Melb… 2016-09-02 00:31:57 1213 -37.8 145. Melbourne AU #> 6 R-Ladies Novi… 2019-05-24 15:14:08 46 45.2 19.8 Novi Sad RS #> 7 R-Ladies Port… 2017-10-30 02:47:19 261 -30.0 -51.2 Porto Alegre BR #> 8 R-Ladies High… 2019-05-09 17:48:51 30 40.5 -74.4 Highland Pa… US #> 9 R-Ladies Canb… 2018-12-10 04:26:52 108 -35.3 149. Canberra AU #> 10 R-Ladies Guay… 2018-04-05 22:48:47 292 -2.21 -79.9 Guayaquil EC #> # … with 150 more rows ``` --- background-image: url(https://raw.githubusercontent.com/tidyverse/readr/master/man/figures/logo.png) background-position: 1050px 20px background-size: 100px # Importar y exportar datos con `readr` .panelset[ .panel[.panel-name[Descripción] ### `readr` sirve para importar y escribir tableros rectangulares guardados en archivos de texto plano .pull-left[ La representación del tablero en el archivo de texto: ``` ciudad,pais,miembros Barcelona,ES,389 Bilbao,ES,38 Valencia,ES,33 Madrid,ES,1222 ``` ] .pull-right[ La representación del tablero en la consola de R: ``` # A tibble: 4 x 3 ciudad pais miembros <chr> <chr> <dbl> 1 Barcelona ES 389 2 Bilbao ES 38 3 Valencia ES 33 4 Madrid ES 1222 ``` ] ] .panel[.panel-name[Funciones] ### Leémos con `read_*()` y escribimos con `write_*()` Las funciones más comunes de `readr` son: | Para leer en R | Para escribir a un archivo | Delimitador | |----------------|----------------------------|:-----------:| | `read_csv()` | `write_csv()` | `,` | | `read_csv2()` | `write_csv2()` | `;` | | `read_tsv()` | `write_tsv()` | `\t` | | `read_delim()` | `write_delim()` | Cualquiera | - Existen también `read_fwf()`, para archivos de ancho fijo, `read_log()` para archivos de registro. - Y `read_rds()` para archivos de formato `.rds`, un formato nativo de R. ] .panel[.panel-name[Ejemplos] Para leer un archivo local: ```r capitulos <- read_csv("capitulos_rladies.csv") ``` Para leer un archivo de la web: ```r capitulos <- read_csv("https://raw.githubusercontent.com/cienciadedatos/datos-de-miercoles/master/datos/2019/2019-06-26/capitulos_rladies.csv") ``` Guardar un archivo: ```r write_tsv(capitulos, "capitulos_rladies.tsv") ``` ] .panel[.panel-name[Discusión] ### Ensayemos el código anterior en RStudio - ¿Qué se imprime en la consola cuando usamos `read_csv()`? - ¿Cuántas columnas tiene el `capitulos`? ¿Cuántas líneas? - ¿Cuál es el delimitador de `capitulos_rladies.tsv`? ] ] --- background-image: url(https://raw.githubusercontent.com/tidyverse/dplyr/master/man/figures/logo.png) background-position: 1050px 20px background-size: 100px # Manipular datos con `dplyr` .panelset[ .panel[.panel-name[Descripción] ### `dplyr` nos da una serie de herramientas para *manipular* datos Las principales funciones, o *verbos* de `dplyr`, son: - `select()`, para seleccionar columnas - `filter()`, para filtrar filas - `mutate()`, para crear o modificar columnas - `summarise()`, para resumir información de las columnas Las tres últimas funciones se pueden usar con `group_by()`, para aplicar operaciones por grupos. ### ¡Dirijámonos a RStudio para explorarlas! ] .panel[.panel-name[`select()`] ### `select()` para seleccionar columnas Podemos seleccionar las columnas por sus nombres: ```r select(capitulos, ciudad, pais) ``` Excluir las que no nos interesan: ```r select(capitulos, -creacion) ``` O usar las funciones auxiliares documentadas en `?tidyselect::language` ```r select(capitulos, latitud:pais) select(capitulos, starts_with("c")) select(capitulos, ends_with("tud")) ``` ] .panel[.panel-name[`filter()`] ### `filter()` para filtrar filas según *condiciones* Por ejemplo, guardando solo los capítulos de España: ```r filter(capitulos, pais == "ES") ``` Los capítulos con más de 1000 miembros: ```r filter(capitulos, miembros > 1000) ``` Los capítulos de más de 1000 miembros que se encuentran en España: ```r filter(capitulos, miembros > 1000 & pais == "ES") filter(capitulos, miembros > 1000, pais == "ES") # ¡ojo con la coma! ``` ] .panel[.panel-name[`mutate()`] ### `mutate()` para crear o modificar columnas Podemos crear una columna a partir de los valores de otra: ```r mutate(capitulos, miembros_por_cien = miembros * 100) ``` Crear una columna con un solo valor: ```r mutate(capitulos, miembros_total = sum(miembros)) ``` O remplazar los valores de una columna existente: ```r mutate(capitulos, miembros = miembros * 100 / sum(miembros)) ``` ] .panel[.panel-name[`summarise()`] ### `summarise()` para resumir información de las columnas .pull-left[ En la mayoría de los casos, `summarise()` se usa para colapsar la información de un tablero en una sola fila: ```r summarise( capitulos, total_miembros = sum(miembros) ) #> # A tibble: 1 x 1 #> total_miembros #> <dbl> #> 1 49037 ``` ] .pull-right[ ... aunque también permite resumenes de más de una fila ```r summarise( capitulos, rango_miembros = range(miembros) ) #> # A tibble: 2 x 1 #> rango_miembros #> <dbl> #> 1 8 #> 2 2069 ``` ] ] .panel[.panel-name[`group_by()`] ### `group_by()` para aplicar operaciones por grupos Por ejemplo, agrupando por país: ```r capitulos_agrupado <- group_by(capitulos, pais) ``` `filter()` guarda la fila con mayor número de miembros por país: ```r filter(capitulos_agrupado, miembros == max(miembros)) ``` `mutate()` y `summarise()` devueven el total de miembros por país: ```r mutate(capitulos_agrupado, total_miembros = sum(miembros)) summarise(capitulos_agrupado, total_miembros = sum(miembros)) ``` 🙋 ¿Cuál es la diferencia entre el resultado de `mutate()` y `summarise()`? ] ] --- background-image: url(https://raw.githubusercontent.com/tidyverse/magrittr/master/man/figures/logo.png) background-position: 1050px 20px background-size: 100px # Encadenar operaciones con `%>%` .center[El operador `%>%` se llama *pipe*. Se pronuncia *paip*.] .pull-left[ ### El *pipe* permite encadenar operaciones y facilita la lectura Una operación de tipo: ```r g(f(x, y), z) ``` Se puede reescribir como: ```r x %>% f(y) %>% g(z) ``` ] .pull-right[ ### Los verbos de `dplyr` se pueden encadenar fácilmente porque siempre reciben y retornan un tablero ```r capitulos %>% filter(pais %in% c("ES", "FR")) %>% group_by(pais) %>% summarise(miembros = sum(miembros)) #> `summarise()` ungrouping output (override with `.groups` argument) #> # A tibble: 2 x 2 #> pais miembros #> <chr> <dbl> #> 1 ES 1682 #> 2 FR 724 ``` ] --- class: inverse, bottom, left # Parte 2 ## Cadenas de caracteres y fechas --- background-image: url(https://raw.githubusercontent.com/tidyverse/stringr/master/man/figures/logo.png) background-position: 1050px 20px background-size: 100px # Cadenas de caracteres con `stringr` .panelset[ .panel[.panel-name[Descripción] ### `stringr` nos permite trabajar con cadenas de caracteres, o *strings*, usando expresiones regulares, o *regex* Las expresiones regulares permiten describir patrones que se encuentran en cadenas de caracteres. .pull-left[ ```r str_view_all( string = c("Git", "GitHub", "R"), * pattern = "G" ) ```
] .pull-right[ ```r str_view_all( string = c("Git", "GitHub", "R"), * pattern = "G.t" ) ```
] ] .panel[.panel-name[Ejemplos] .pull-left[ ### `dplyr::filter()` ```r capitulos %>% filter( str_starts( ciudad, # string "M[a|e]", # patrón ) ) %>% select(capitulo) #> # A tibble: 6 x 1 #> capitulo #> <chr> #> 1 R-Ladies Melbourne #> 2 R-Ladies Madrid #> 3 R-Ladies Memphis #> 4 R-Ladies Mendoza #> 5 R-Ladies Manchester #> 6 R-Ladies Madison ``` ] .pull-left[ ### `dplyr::mutate()` ```r capitulos %>% mutate( capitulo = str_remove( capitulo, # string "R-Ladies " # patrón ) ) %>% select(capitulo) #> # A tibble: 160 x 1 #> capitulo #> <chr> #> 1 Barcelona #> 2 Ushuaia #> 3 Bilbao #> 4 Bariloche #> 5 Melbourne #> 6 Novi Sad #> 7 Porto Alegre #> 8 Highland Park #> 9 Canberra #> 10 Guayaquil #> # … with 150 more rows ``` ] ] .panel[.panel-name[Ejercicio] ¿Cuál es el único capítulo de las R-Ladies que *no* comienza por `"R-Ladies"`? ```r capitulos %>% filter(str_...(capitulo, ..., ...)) %>% select(capitulo) ``` ] ] --- background-image: url(https://raw.githubusercontent.com/tidyverse/lubridate/master/man/figures/logo.png) background-position: 1050px 20px background-size: 100px # Fechas con `lubridate` .panelset[ .panel[.panel-name[Descripción] ### `lubridate` facilita el trabajo con fechas y horas - Permite **crear** fechas y horas a partir de cadenas de caracteres o componentes individuales. ```r ymd_hms("2010-12-13 15:30:30") #> [1] "2010-12-13 15:30:30 UTC" ``` - Permite **extraer** componentes de fechas y horas. ```r ymd_hms("2010-12-13 15:30:30") %>% month() #> [1] 12 ``` - Facilita el trabajo con **lapsos de tiempo** y **zonas horarias**. ] .panel[.panel-name[Ejemplos] ```r capitulos %>% select(capitulo, creacion) %>% mutate( hora = hour(creacion), minuto = minute(creacion), segundo = second(creacion) ) #> # A tibble: 160 x 5 #> capitulo creacion hora minuto segundo #> <chr> <dttm> <int> <int> <dbl> #> 1 R-Ladies Barcelona 2016-10-22 10:56:36 10 56 36 #> 2 R-Ladies Ushuaia 2018-05-09 16:39:48 16 39 48 #> 3 R-Ladies Bilbao 2019-02-27 05:37:09 5 37 9 #> 4 R-Ladies Bariloche 2018-05-10 02:22:15 2 22 15 #> 5 R-Ladies Melbourne 2016-09-02 00:31:57 0 31 57 #> 6 R-Ladies Novi Sad 2019-05-24 15:14:08 15 14 8 #> 7 R-Ladies Porto Alegre 2017-10-30 02:47:19 2 47 19 #> 8 R-Ladies Highland Park 2019-05-09 17:48:51 17 48 51 #> 9 R-Ladies Canberra 2018-12-10 04:26:52 4 26 52 #> 10 R-Ladies Guayaquil 2018-04-05 22:48:47 22 48 47 #> # … with 150 more rows ``` ] .panel[.panel-name[Ejercicio] ¿En qué año se creó el mayor número de capítulos de R-Ladies? ¿Tenemos información para los 12 meses de cada año? ```r capitulos %>% mutate( anio = ...(creacion), mes = ...(creacion) ) %>% ...(anio) %>% summarise( n_capitulos = n(), n_meses = n_distinct(mes) ) ``` ] ] --- class: inverse, bottom, left # Parte 3 ## Datos relacionales y datos ordenados --- background-image: url(https://raw.githubusercontent.com/tidyverse/tidyr/master/man/figures/logo.png) background-position: 1050px 20px background-size: 100px # Ordenar datos con `tidyr` .panelset[ .panel[.panel-name[Descripción] Existen tres reglas interrelacionadas que hacen que un conjunto de datos sea ordenado: 1. Cada variable debe tener su propia columna. 1. Cada observación debe tener su propia fila. 1. Cada valor debe tener su propia celda. ![](https://es.r4ds.hadley.nz/diagrams_w_text_as_path/es/tidy-1.svg) .right[Fuente: [R para Ciencia de Datos](https://es.r4ds.hadley.nz/datos-ordenados.html)] ] .panel[.panel-name[`Ejemplo`] `capitulos` es un conjunto de datos limpio: - Cada variable tiene su propia columna. - Cada capítulo tiene su propia fila. - Cada valor tiene su propia celda. ```r capitulos #> # A tibble: 160 x 7 #> capitulo creacion miembros latitud longitud ciudad pais #> <chr> <dttm> <dbl> <dbl> <dbl> <chr> <chr> #> 1 R-Ladies Barc… 2016-10-22 10:56:36 389 41.4 2.17 Barcelona ES #> 2 R-Ladies Ushu… 2018-05-09 16:39:48 23 -54.8 -68.3 Ushuaia AR #> 3 R-Ladies Bilb… 2019-02-27 05:37:09 38 43.2 -2.93 Bilbao ES #> 4 R-Ladies Bari… 2018-05-10 02:22:15 114 -41.1 -71.3 San Carlos … AR #> 5 R-Ladies Melb… 2016-09-02 00:31:57 1213 -37.8 145. Melbourne AU #> 6 R-Ladies Novi… 2019-05-24 15:14:08 46 45.2 19.8 Novi Sad RS #> 7 R-Ladies Port… 2017-10-30 02:47:19 261 -30.0 -51.2 Porto Alegre BR #> 8 R-Ladies High… 2019-05-09 17:48:51 30 40.5 -74.4 Highland Pa… US #> 9 R-Ladies Canb… 2018-12-10 04:26:52 108 -35.3 149. Canberra AU #> 10 R-Ladies Guay… 2018-04-05 22:48:47 292 -2.21 -79.9 Guayaquil EC #> # … with 150 more rows ``` ] .panel[.panel-name[`pivot_longer()`] "Ensuciemos" nuestros datos: ```r capitulos_coord_largo <- capitulos %>% pivot_longer( c(latitud, longitud), names_to = "nombre_coord", values_to = "valor_coord" ) capitulos_coord_largo #> # A tibble: 320 x 7 #> capitulo creacion miembros ciudad pais nombre_coord valor_coord #> <chr> <dttm> <dbl> <chr> <chr> <chr> <dbl> #> 1 R-Ladies … 2016-10-22 10:56:36 389 Barcelo… ES latitud 41.4 #> 2 R-Ladies … 2016-10-22 10:56:36 389 Barcelo… ES longitud 2.17 #> 3 R-Ladies … 2018-05-09 16:39:48 23 Ushuaia AR latitud -54.8 #> 4 R-Ladies … 2018-05-09 16:39:48 23 Ushuaia AR longitud -68.3 #> 5 R-Ladies … 2019-02-27 05:37:09 38 Bilbao ES latitud 43.2 #> 6 R-Ladies … 2019-02-27 05:37:09 38 Bilbao ES longitud -2.93 #> 7 R-Ladies … 2018-05-10 02:22:15 114 San Car… AR latitud -41.1 #> 8 R-Ladies … 2018-05-10 02:22:15 114 San Car… AR longitud -71.3 #> 9 R-Ladies … 2016-09-02 00:31:57 1213 Melbour… AU latitud -37.8 #> 10 R-Ladies … 2016-09-02 00:31:57 1213 Melbour… AU longitud 145. #> # … with 310 more rows ``` ] .panel[.panel-name[`pivot_wider()`] Volvamos al estado inicial: ```r capitulos_coord_largo %>% pivot_wider( names_from = nombre_coord, values_from = valor_coord ) #> # A tibble: 160 x 7 #> capitulo creacion miembros ciudad pais latitud longitud #> <chr> <dttm> <dbl> <chr> <chr> <dbl> <dbl> #> 1 R-Ladies Barc… 2016-10-22 10:56:36 389 Barcelona ES 41.4 2.17 #> 2 R-Ladies Ushu… 2018-05-09 16:39:48 23 Ushuaia AR -54.8 -68.3 #> 3 R-Ladies Bilb… 2019-02-27 05:37:09 38 Bilbao ES 43.2 -2.93 #> 4 R-Ladies Bari… 2018-05-10 02:22:15 114 San Carlos … AR -41.1 -71.3 #> 5 R-Ladies Melb… 2016-09-02 00:31:57 1213 Melbourne AU -37.8 145. #> 6 R-Ladies Novi… 2019-05-24 15:14:08 46 Novi Sad RS 45.2 19.8 #> 7 R-Ladies Port… 2017-10-30 02:47:19 261 Porto Alegre BR -30.0 -51.2 #> 8 R-Ladies High… 2019-05-09 17:48:51 30 Highland Pa… US 40.5 -74.4 #> 9 R-Ladies Canb… 2018-12-10 04:26:52 108 Canberra AU -35.3 149. #> 10 R-Ladies Guay… 2018-04-05 22:48:47 292 Guayaquil EC -2.21 -79.9 #> # … with 150 more rows ``` ] ] --- background-image: url(https://github.com/cienciadedatos.png) background-position: 1050px 20px background-size: 100px # Datos sobre eventos de las RLadies Ahora comenzaremos a trabajar con un tablero adicional con información de los eventos organizados por los diferentes capítulos de las R-Ladies. ```r eventos <- read_csv("https://raw.githubusercontent.com/cienciadedatos/datos-de-miercoles/master/datos/2019/2019-06-26/eventos_rladies.csv") ``` .pull-left[ #### `eventos` ```r glimpse(eventos) #> Rows: 1,534 #> Columns: 6 #> $ capitulo <chr> "R-Ladies Barcelona", "R-Ladies Barcelona", "R-Ladie… #> $ titulo_evento <chr> "¡Primer evento de R-Ladies Barcelona!", "Scalable M… #> $ fecha_local <date> 2016-11-21, 2016-12-05, 2017-01-16, 2017-02-20, 201… #> $ hora_local <time> 19:00:00, 19:00:00, 19:00:00, 19:00:00, 19:00:00, 1… #> $ respuesta_asistire <dbl> 18, 58, 33, 38, 16, 31, 18, 1, 33, 36, 28, 30, 8, 24… #> $ descripcion_evento <chr> "<p>Estamos preparando el primer encuentro de #RLadi… ``` ] .pull-right[ #### `capitulos` ```r glimpse(capitulos) #> Rows: 160 #> Columns: 7 #> $ capitulo <chr> "R-Ladies Barcelona", "R-Ladies Ushuaia", "R-Ladies Bilbao", "… #> $ creacion <dttm> 2016-10-22 10:56:36, 2018-05-09 16:39:48, 2019-02-27 05:37:09… #> $ miembros <dbl> 389, 23, 38, 114, 1213, 46, 261, 30, 108, 292, 149, 658, 118, … #> $ latitud <dbl> 41.40, -54.79, 43.25, -41.14, -37.81, 45.25, -30.04, 40.50, -3… #> $ longitud <dbl> 2.17, -68.31, -2.93, -71.32, 144.96, 19.85, -51.22, -74.43, 14… #> $ ciudad <chr> "Barcelona", "Ushuaia", "Bilbao", "San Carlos de Bariloche", "… #> $ pais <chr> "ES", "AR", "ES", "AR", "AU", "RS", "BR", "US", "AU", "EC", "I… ``` ] Ambos tableros comparten la columna `capitulo`. --- background-image: url(https://raw.githubusercontent.com/tidyverse/dplyr/master/man/figures/logo.png) background-position: 1050px 20px background-size: 100px # Datos relacionales con `dplyr` .panelset[ .panel[.panel-name[Descripción] ### Los verbos **join** de `dplyr` permiten unir tableros relacionadas **Uniones de transformación**, que agregan nuevas variables a un tablero con respecto a las observaciones de otro tablero. - `left_join()` - `right_join()` - `full_join()` - `inner_join()` **Uniones de filtro**, que filtran observaciones con respecto a la presencia o a la ausencia de observaciones en otro tablero. - `semi_join()` - `anti_join()` ] .panel[.panel-name[`left_join()`] ```r dim(eventos) #> [1] 1534 6 left_join(eventos, capitulos, by = "capitulo") #> # A tibble: 1,534 x 12 #> capitulo titulo_evento fecha_local hora_local respuesta_asist… descripcion_eve… #> <chr> <chr> <date> <time> <dbl> <chr> #> 1 R-Ladie… ¡Primer even… 2016-11-21 19:00 18 "<p>Estamos pre… #> 2 R-Ladie… Scalable Mac… 2016-12-05 19:00 58 "<p><a>L'… #> 3 R-Ladie… RMarkdown tu… 2017-01-16 19:00 33 "<p>(Scroll dow… #> 4 R-Ladie… Google Analy… 2017-02-20 19:00 38 "<p>(Scroll dow… #> 5 R-Ladie… Data wrangli… 2017-03-20 19:00 16 "<p>(Scroll dow… #> 6 R-Ladie… Introducció … 2017-04-24 19:00 31 "<p>Tindrem un … #> 7 R-Ladie… Descifrando … 2017-06-12 19:00 18 "<p>Es realitza… #> 8 R-Ladie… WomenInTech … 2017-08-25 18:30 1 "<p>[!!!] NO OS… #> 9 R-Ladie… Plots with g… 2017-09-27 19:00 33 "<p>Per fi torn… #> 10 R-Ladie… Take your R … 2017-11-06 19:00 36 "<p>T'agradaria… #> # … with 1,524 more rows, and 6 more variables: creacion <dttm>, miembros <dbl>, #> # latitud <dbl>, longitud <dbl>, ciudad <chr>, pais <chr> ``` ] .panel[.panel-name[`semi_join()`] ```r capitulos_mpc <- filter(capitulos, pais %in% c("ES", "FR", "CO")) pull(capitulos_mpc, ciudad) #> [1] "Barcelona" "Bilbao" "Valencia" "Madrid" "Lyon" #> [6] "Montpellier" "Paris" "Strasbourg" "Bogotá" semi_join(eventos, capitulos_mpc, by = "capitulo") #> # A tibble: 78 x 6 #> capitulo titulo_evento fecha_local hora_local respuesta_asist… descripcion_eve… #> <chr> <chr> <date> <time> <dbl> <chr> #> 1 R-Ladie… ¡Primer even… 2016-11-21 19:00 18 "<p>Estamos pre… #> 2 R-Ladie… Scalable Mac… 2016-12-05 19:00 58 "<p><a>L'… #> 3 R-Ladie… RMarkdown tu… 2017-01-16 19:00 33 "<p>(Scroll dow… #> 4 R-Ladie… Google Analy… 2017-02-20 19:00 38 "<p>(Scroll dow… #> 5 R-Ladie… Data wrangli… 2017-03-20 19:00 16 "<p>(Scroll dow… #> 6 R-Ladie… Introducció … 2017-04-24 19:00 31 "<p>Tindrem un … #> 7 R-Ladie… Descifrando … 2017-06-12 19:00 18 "<p>Es realitza… #> 8 R-Ladie… WomenInTech … 2017-08-25 18:30 1 "<p>[!!!] NO OS… #> 9 R-Ladie… Plots with g… 2017-09-27 19:00 33 "<p>Per fi torn… #> 10 R-Ladie… Take your R … 2017-11-06 19:00 36 "<p>T'agradaria… #> # … with 68 more rows ``` ] ] --- class: inverse, middle, center background-image: url(https://images.unsplash.com/photo-1487235829740-e0ac5a286e1c?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1496&q=80) background-size: cover # ¿Preguntas?