class: title-slide, middle, right background-image: url(https://images.unsplash.com/photo-1527402858-36f052d83df4?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1267&q=80) background-size: cover ### Ordenar, unir, exportar # ## **Miriam Lerma**<br> Marzo 2021 --- class: inverse ## 1. Intro Funciones del tidyverse.<br> Para manipular data frames: - [filter](#filt) - [mutate](#muta) - [summarise](#suma) - [unique](#unique) - [drop_na](#drop) - [Unir data frames](#join) - [Exportar data frames](#exportar) -- ## Ustedes - Conocimientos básicos de R (saben abrirlo, cargar paquetes y datos). - Quieren manipular sus data frames. - Quieren exportar su nuevo data frame. --- class: inverse ## Créditos -Material basado en el libro: [
R4DS, editado por Riva Quiroga](https://r4ds-en-espaniol.netlify.app/) -Y materiales de RLadies [
Zero to Hero](https://github.com/rladies/meetup-presentations_freiburg) -Presentaciones de tidyverse: [
María Paula Caldas](https://mpaulacaldas.github.io/rrrtidyverse/) [
RLadiesBuenosAires](https://www.youtube.com/watch?v=ycudMihLues&t=3605s) -Imágenes adicionales [
Portada por Jess Bailey](https://unsplash.com/@jessbaileydesigns) <br> [
Unsplash](https://unsplash.com/) --- class: title-slide, middle, center background-image: url(https://images.unsplash.com/photo-1527402858-36f052d83df4?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1267&q=80) background-size: cover # Ordenar --- ## Datos pinguinos. 🐧 Si van a hacer los ejercicios a la par, cargen sus datos. ```r library(datos) ``` ``` ## Warning: package 'datos' was built under R version 4.2.3 ``` ```r Pingus<-pinguinos ``` Otra opcion es usar read_csv desde su computador. ```r library(tidyverse) ``` --- ## 1.1. Tidyverse Tidyverse engloba varios paquetes, la mayoria para especificamente para inspeccionar y manipular tus datos. .center[ <img src="https://tidyverse.tidyverse.org/articles/tidyverse-logo.png" height="350" /> ] --- ## 1.2. Pipe Vamos a usar mucho el **pipe** un argumento que se usa para encadenar funciones. En su teclado: strg+alt+M ```r %>% ``` --- ## 1.3. Funciones El paquete dplyr nos da una serie de herramientas para **manipular** datos Las principales funciones, o **verbos** de dplyr, son: - **count()** para contar - **select()**, para seleccionar columnas - **filter()**, para filtrar filas - **mutate()**, para crear o modificar columnas - **summarise()**, para resumir información de las columnas count y select las vimos en **[
la clase pasada](https://miriamlerma.netlify.app/materiales.html)** --- name: filt ## 1.4. filter() Podemos filtrar columnas de acuerdo a valores que nos interesen. Pero para esto hay que conocer algunos operadores lógicos: - El símbolo **==** es para decir 'igual a' - El símbolo **!=** es para decir 'distinto a' - El símbolo **>** es para decir 'mayor que' - El símbolo **<** es para decir 'menor que' - El símbolo **>=** es para decir 'mayor o igual que' - El símbolo **<=** es para decir 'menor o igual que' - El símbolo **&** es para decir 'y' - El símbolo **|** es para decir 'o' --- ## 1.4. filter(==) ```r Pingus %>% filter(sexo == 'hembra') ``` Nota: las variables son sin comillas y las categorías en comillas. -- Vayan a su environment... y revisen... se cambio mi tabla? -- No. Hay que crear un nuevo objeto. ```r PingusHembras<-Pingus %>% filter(sexo == 'hembra') ``` Miren su environment. --- ## 1.4. filter(<=) ```r Pingus %>% * filter(largo_pico_mm <= 39.1) ``` ``` ## # A tibble: 83 × 8 ## especie isla largo_pico_mm alto_pico_mm largo_alet…¹ masa_…² sexo anio ## <fct> <fct> <dbl> <dbl> <int> <int> <fct> <int> ## 1 Adelia Torgersen 39.1 18.7 181 3750 macho 2007 ## 2 Adelia Torgersen 36.7 19.3 193 3450 hemb… 2007 ## 3 Adelia Torgersen 38.9 17.8 181 3625 hemb… 2007 ## 4 Adelia Torgersen 34.1 18.1 193 3475 <NA> 2007 ## 5 Adelia Torgersen 37.8 17.1 186 3300 <NA> 2007 ## 6 Adelia Torgersen 37.8 17.3 180 3700 <NA> 2007 ## 7 Adelia Torgersen 38.6 21.2 191 3800 macho 2007 ## 8 Adelia Torgersen 34.6 21.1 198 4400 macho 2007 ## 9 Adelia Torgersen 36.6 17.8 185 3700 hemb… 2007 ## 10 Adelia Torgersen 38.7 19 195 3450 hemb… 2007 ## # … with 73 more rows, and abbreviated variable names ¹largo_aleta_mm, ## # ²masa_corporal_g ``` --- ## 1.4. filter(>=) ```r Pingus %>% * filter(largo_pico_mm >= 39.1) ``` ``` ## # A tibble: 260 × 8 ## especie isla largo_pico_mm alto_pico_mm largo_alet…¹ masa_…² sexo anio ## <fct> <fct> <dbl> <dbl> <int> <int> <fct> <int> ## 1 Adelia Torgersen 39.1 18.7 181 3750 macho 2007 ## 2 Adelia Torgersen 39.5 17.4 186 3800 hemb… 2007 ## 3 Adelia Torgersen 40.3 18 195 3250 hemb… 2007 ## 4 Adelia Torgersen 39.3 20.6 190 3650 macho 2007 ## 5 Adelia Torgersen 39.2 19.6 195 4675 macho 2007 ## 6 Adelia Torgersen 42 20.2 190 4250 <NA> 2007 ## 7 Adelia Torgersen 41.1 17.6 182 3200 hemb… 2007 ## 8 Adelia Torgersen 42.5 20.7 197 4500 macho 2007 ## 9 Adelia Torgersen 46 21.5 194 4200 macho 2007 ## 10 Adelia Biscoe 40.6 18.6 183 3550 macho 2007 ## # … with 250 more rows, and abbreviated variable names ¹largo_aleta_mm, ## # ²masa_corporal_g ``` --- ## 1.4. filter(&) ```r Pingus %>% * filter(isla == 'Biscoe' & especie =='Adelia') ``` ``` ## # A tibble: 44 × 8 ## especie isla largo_pico_mm alto_pico_mm largo_aleta_mm masa_c…¹ sexo anio ## <fct> <fct> <dbl> <dbl> <int> <int> <fct> <int> ## 1 Adelia Biscoe 37.8 18.3 174 3400 hemb… 2007 ## 2 Adelia Biscoe 37.7 18.7 180 3600 macho 2007 ## 3 Adelia Biscoe 35.9 19.2 189 3800 hemb… 2007 ## 4 Adelia Biscoe 38.2 18.1 185 3950 macho 2007 ## 5 Adelia Biscoe 38.8 17.2 180 3800 macho 2007 ## 6 Adelia Biscoe 35.3 18.9 187 3800 hemb… 2007 ## 7 Adelia Biscoe 40.6 18.6 183 3550 macho 2007 ## 8 Adelia Biscoe 40.5 17.9 187 3200 hemb… 2007 ## 9 Adelia Biscoe 37.9 18.6 172 3150 hemb… 2007 ## 10 Adelia Biscoe 40.5 18.9 180 3950 macho 2007 ## # … with 34 more rows, and abbreviated variable name ¹masa_corporal_g ``` --- name: muta ## 1.5. mutate() Es para crear o modificar columnas. Podemos crear una columna a partir de los valores de otra. ```r Pingus<-Pingus %>% * mutate(kilos = masa_corporal_g / 1000) ``` --- ## 1.6. lubridate Facilita el trabajo con fechas y horas, ya que te permite decirle a R que una cadena de caracteres, es tiempo y horas. ```r library(lubridate) ``` ```r ymd_hms("2010-12-13 15:30:30") ``` Ademas, te permite **extraer** componentes de fechas y horas. ```r ymd_hms("2010-12-13 15:30:30") %>% month() ``` ``` ## [1] 12 ``` --- ## 1.6. ymd_hms Datos de hora inventados, solo nos interesa ver la hora, los minutos y los segundos. ```r DatosPorHora<-c("2010-12-13 13:30:30","2010-12-13 14:30:30","2010-12-13 15:30:30","2010-12-13 16:30:30","2010-12-13 17:30:30","2010-12-13 18:30:30","2010-12-13 19:30:30","2010-12-13 20:30:30") Horas<-data.frame(DatosPorHora=DatosPorHora) ``` Usando **mutate** podemos separar esa informacion y extraer la que nos interesa. ```r Horas %>% mutate( hora = hour(DatosPorHora), minuto = minute(DatosPorHora), segundo = second(DatosPorHora) ) ``` --- name: suma ## 1.7. group_by() y summarise() summarise() para resumir información de las columnas ```r Pingus %>% group_by(anio) %>% summarise(PromedioLargoPico=mean(largo_pico_mm)) ``` ``` ## # A tibble: 3 × 2 ## anio PromedioLargoPico ## <int> <dbl> ## 1 2007 NA ## 2 2008 43.5 ## 3 2009 NA ``` --- ## 1.8. top_n() Obserservaciones maximas que le pidamos de una variable. ```r Pingus %>% top_n(2,largo_pico_mm) ``` ``` ## # A tibble: 2 × 9 ## especie isla largo_pico_mm alto_pico_mm largo_al…¹ masa_…² sexo anio kilos ## <fct> <fct> <dbl> <dbl> <int> <int> <fct> <int> <dbl> ## 1 Papúa Biscoe 59.6 17 230 6050 macho 2007 6.05 ## 2 Barbijo Dream 58 17.8 181 3700 hemb… 2007 3.7 ## # … with abbreviated variable names ¹largo_aleta_mm, ²masa_corporal_g ``` --- name: unique ## 1.9. unique() o distinct() Valores únicos en esa columna. Hay varias maneras de ver este tipo de informacion: ```r unique(Pingus$especie) ``` ``` ## [1] Adelia Papúa Barbijo ## Levels: Adelia Barbijo Papúa ``` ```r pinguinos %>% * distinct(especie) ``` ``` ## # A tibble: 3 × 1 ## especie ## <fct> ## 1 Adelia ## 2 Papúa ## 3 Barbijo ``` --- ## 1.9. unique() o distinct() Valores únicos en esa columna. ```r Pingus %>% distinct(isla) ``` ``` ## # A tibble: 3 × 1 ## isla ## <fct> ## 1 Torgersen ## 2 Biscoe ## 3 Dream ``` --- name: drop ## 1.10. drop_na Hay que tener cuidado con las nas para varias operaciones. Para filtrar nas en pipe: ```r Pingus %>% drop_na(largo_pico_mm) ``` Otra opcion: ```r PingusSinNA <- Pingus %>% filter(!is.na(largo_pico_mm)) ``` Miren que ahora tenemos menos observaciones en pingus sin NAs. --- class: inverse # Ejercicios
Usar funciones de tidyverse - count - distinct - group_by - drop_na - summarise - mutate - select - filter --- ## 1.11. Ejercicios ```r library(datos) Pingus<-pinguinos ``` Cuantas observaciones tenemos? ```r pinguinos %>% count() ``` Cuantas observaciones por isla? ```r Pingus %>% distinct(isla) ``` Cuantas observaciones por sexo e isla? ```r Pingus %>% group_by(sexo, isla) %>% count() ``` --- ## 1.11. Ejercicios Cual es el promedio de peso entre hembras y machos por especie? y en base a cuantas observaciones? ```r Pingus %>% group_by(especie,sexo) %>% drop_na(masa_corporal_g)%>% summarise(mean = mean(masa_corporal_g), n = n()) ``` Cambia el peso de los pinguinos a kilos. ```r Pingus<-Pingus %>% mutate(kilos = masa_corporal_g / 1000) ``` --- ## 1.12. Ejercicios solos - Crea un objeto con solo dos columnas, las de sexo y anio. ```r #_____ <-Pingus %>% # select(____,_____) ``` - Crea un objeto con las diferentes especies de pinguinos que hay en el data.frame y a que especies corresponden. ```r #______ <-Pingus %>% # distinct(_____) ``` - Crea un objeto con solo machos. ```r #______ <-Pingus %>% # filter(_____ == '______') ``` - Crea un objeto con solo hembras que pesen (masa_corporal_g) igual o mas de 3800 g. ```r #______ <-Pingus %>% # filter(_____ == '______')%>% # filter(______ >= ______) ``` --- name: join class: title-slide, inverse, middle, center background-image: url(https://images.unsplash.com/photo-1527402858-36f052d83df4?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1267&q=80) background-size: cover # Unir --- # 2.1. left_join() Datos inventados de 10 individuos, pesos de los individuos y la concentracion de pesticida. ```r ID<-c("ID01","ID02","ID03","ID04","ID05", "ID06","ID07","ID08","ID09","ID10") Pesos<-c(1.5,2.0,3.5,4.1,2.6,3.7,8.9,2.5,6.3,1.0) Pesticidas<-c(10,20,35,1,6,3,8,2,3,1) ``` --- # 2.1. left_join() Muchas veces tengo datos de laboratorio por un lado... ```r Laboratorio<-data.frame(ID,Pesticidas) head(Laboratorio) ``` ``` ## ID Pesticidas ## 1 ID01 10 ## 2 ID02 20 ## 3 ID03 35 ## 4 ID04 1 ## 5 ID05 6 ## 6 ID06 3 ``` -- ... y de campo por otro. ```r Libreta <- data.frame(ID,Pesos) head(Libreta) ``` ``` ## ID Pesos ## 1 ID01 1.5 ## 2 ID02 2.0 ## 3 ID03 3.5 ## 4 ID04 4.1 ## 5 ID05 2.6 ## 6 ID06 3.7 ``` --- # 2.1. left_join() Pero los necesitamos juntos! - **left_join()** me permite unirlos. Pero es importante tener un ID para poder unir las tablas. ```r *DatosJuntos<-left_join(Libreta, Laboratorio, by = "ID") DatosJuntos ``` ``` ## ID Pesos Pesticidas ## 1 ID01 1.5 10 ## 2 ID02 2.0 20 ## 3 ID03 3.5 35 ## 4 ID04 4.1 1 ## 5 ID05 2.6 6 ## 6 ID06 3.7 3 ## 7 ID07 8.9 8 ## 8 ID08 2.5 2 ## 9 ID09 6.3 3 ## 10 ID10 1.0 1 ``` --- # 2.1. left_join() Lo que hace left_join() es usar ese ID para saber como unir la tabla.<br> <img src="https://raw.githubusercontent.com/MiriamLL/Curso_CIAD/main/Figuras/left-join.gif" height="350" /> Fuente: [tidyexplain](https://www.garrickadenbuie.com/project/tidyexplain/) Otras opciones de unión [ilustradas](https://www.garrickadenbuie.com/project/tidyexplain/) --- # 2.2. pivot_longer A veces los datos se toman de manera **no ordenada** en el sentido de que las observaciones estan en cada columna y no en cada fila. Esto es normal, particularmente en campo o en el laboratorio y tenemos una libreta con espacio limitado. Entonces hay que re-organizarlos. <img src="https://r4ds-en-espaniol.netlify.app/diagrams_w_text_as_path/es/tidy-9.svg" height="200" /> --- # 2.2. pivot_longer Datos inventados de 5 especies y sus riquezas en tres anios diferentes. ```r Especies<-c('Especie1','Especie2','Especie3','Especie4','Especie5') Anio2010<-c(5,4,5,6,7) Anio2011<-c(3,2,1,9,4) Anio2012<-c(6,2,3,7,8) ``` Creamos un nuevo data frame usando esos datos. ```r EspecieAnio<-data.frame(Especie=Especies, Anio2010=Anio2010,Anio2011=Anio2011,Anio2012) ``` Quedar algo así ```r head(EspecieAnio) ``` ``` ## Especie Anio2010 Anio2011 Anio2012 ## 1 Especie1 5 3 6 ## 2 Especie2 4 2 2 ## 3 Especie3 5 1 3 ## 4 Especie4 6 9 7 ## 5 Especie5 7 4 8 ``` --- # 2.2. pivot_longer El argumento **pivot_longer** te permite reorganizarlas. ```r Especies_largo <- EspecieAnio %>% pivot_longer(c(Anio2010, Anio2011, Anio2012), names_to = "Anio", values_to = "Riqueza" ) Especies_largo ``` ``` ## # A tibble: 15 × 3 ## Especie Anio Riqueza ## <chr> <chr> <dbl> ## 1 Especie1 Anio2010 5 ## 2 Especie1 Anio2011 3 ## 3 Especie1 Anio2012 6 ## 4 Especie2 Anio2010 4 ## 5 Especie2 Anio2011 2 ## 6 Especie2 Anio2012 2 ## 7 Especie3 Anio2010 5 ## 8 Especie3 Anio2011 1 ## 9 Especie3 Anio2012 3 ## 10 Especie4 Anio2010 6 ## 11 Especie4 Anio2011 9 ## 12 Especie4 Anio2012 7 ## 13 Especie5 Anio2010 7 ## 14 Especie5 Anio2011 4 ## 15 Especie5 Anio2012 8 ``` --- # 2.3. pivot_wider Si por alguna razón quiero tenerlos separados, puedo también extraerlos a lo ancho. <img src="https://r4ds-en-espaniol.netlify.app/diagrams_w_text_as_path/es/tidy-8.svg" height="450" /> --- # 2.3. pivot_wider Datos inventados. ```r Especies_ancho<-Especies_largo %>% pivot_wider(names_from = Anio, values_from = Riqueza) Especies_ancho ``` ``` ## # A tibble: 5 × 4 ## Especie Anio2010 Anio2011 Anio2012 ## <chr> <dbl> <dbl> <dbl> ## 1 Especie1 5 3 6 ## 2 Especie2 4 2 2 ## 3 Especie3 5 1 3 ## 4 Especie4 6 9 7 ## 5 Especie5 7 4 8 ``` --- # 2.4. Unite Este argumento sirve para **unir** valores de dos columnas en una columna. ```r (Pingus<-Pingus %>% unite(col = especie_isla, c("especie", "isla"), sep = ": ")) ``` ``` ## # A tibble: 344 × 7 ## especie_isla largo_pico_mm alto_pico_mm largo_alet…¹ masa_…² sexo anio ## <chr> <dbl> <dbl> <int> <int> <fct> <int> ## 1 Adelia: Torgersen 39.1 18.7 181 3750 macho 2007 ## 2 Adelia: Torgersen 39.5 17.4 186 3800 hemb… 2007 ## 3 Adelia: Torgersen 40.3 18 195 3250 hemb… 2007 ## 4 Adelia: Torgersen NA NA NA NA <NA> 2007 ## 5 Adelia: Torgersen 36.7 19.3 193 3450 hemb… 2007 ## 6 Adelia: Torgersen 39.3 20.6 190 3650 macho 2007 ## 7 Adelia: Torgersen 38.9 17.8 181 3625 hemb… 2007 ## 8 Adelia: Torgersen 39.2 19.6 195 4675 macho 2007 ## 9 Adelia: Torgersen 34.1 18.1 193 3475 <NA> 2007 ## 10 Adelia: Torgersen 42 20.2 190 4250 <NA> 2007 ## # … with 334 more rows, and abbreviated variable names ¹largo_aleta_mm, ## # ²masa_corporal_g ``` --- # 2.5. Separate Este argumento sirve para **separar** valores de una columna en dos columnas. ```r Pingus %>% separate(col = especie_isla, into = c("especie", "isla"), sep = ":") ``` Ojo: borra las columnas originales, si no queremos que las borre debemos agregar **remove = FALSE.** ```r (Pingus<-Pingus %>% separate(col = especie_isla, into = c("especie", "isla"), sep = ":", * remove = FALSE)) ``` ``` ## # A tibble: 344 × 9 ## especie_isla especie isla largo…¹ alto_…² largo…³ masa_…⁴ sexo anio ## <chr> <chr> <chr> <dbl> <dbl> <int> <int> <fct> <int> ## 1 Adelia: Torgersen Adelia " Torg… 39.1 18.7 181 3750 macho 2007 ## 2 Adelia: Torgersen Adelia " Torg… 39.5 17.4 186 3800 hemb… 2007 ## 3 Adelia: Torgersen Adelia " Torg… 40.3 18 195 3250 hemb… 2007 ## 4 Adelia: Torgersen Adelia " Torg… NA NA NA NA <NA> 2007 ## 5 Adelia: Torgersen Adelia " Torg… 36.7 19.3 193 3450 hemb… 2007 ## 6 Adelia: Torgersen Adelia " Torg… 39.3 20.6 190 3650 macho 2007 ## 7 Adelia: Torgersen Adelia " Torg… 38.9 17.8 181 3625 hemb… 2007 ## 8 Adelia: Torgersen Adelia " Torg… 39.2 19.6 195 4675 macho 2007 ## 9 Adelia: Torgersen Adelia " Torg… 34.1 18.1 193 3475 <NA> 2007 ## 10 Adelia: Torgersen Adelia " Torg… 42 20.2 190 4250 <NA> 2007 ## # … with 334 more rows, and abbreviated variable names ¹largo_pico_mm, ## # ²alto_pico_mm, ³largo_aleta_mm, ⁴masa_corporal_g ``` --- # 2.6. Rename Este argumento **cambia** el nombre de la columna. El nuevo nombre se debe poner primero y el nombre anterior después. ```r Pingus %>% rename(peso = masa_corporal_g) ``` ``` ## # A tibble: 344 × 9 ## especie_isla especie isla largo…¹ alto_…² largo…³ peso sexo anio ## <chr> <chr> <chr> <dbl> <dbl> <int> <int> <fct> <int> ## 1 Adelia: Torgersen Adelia " Torger… 39.1 18.7 181 3750 macho 2007 ## 2 Adelia: Torgersen Adelia " Torger… 39.5 17.4 186 3800 hemb… 2007 ## 3 Adelia: Torgersen Adelia " Torger… 40.3 18 195 3250 hemb… 2007 ## 4 Adelia: Torgersen Adelia " Torger… NA NA NA NA <NA> 2007 ## 5 Adelia: Torgersen Adelia " Torger… 36.7 19.3 193 3450 hemb… 2007 ## 6 Adelia: Torgersen Adelia " Torger… 39.3 20.6 190 3650 macho 2007 ## 7 Adelia: Torgersen Adelia " Torger… 38.9 17.8 181 3625 hemb… 2007 ## 8 Adelia: Torgersen Adelia " Torger… 39.2 19.6 195 4675 macho 2007 ## 9 Adelia: Torgersen Adelia " Torger… 34.1 18.1 193 3475 <NA> 2007 ## 10 Adelia: Torgersen Adelia " Torger… 42 20.2 190 4250 <NA> 2007 ## # … with 334 more rows, and abbreviated variable names ¹largo_pico_mm, ## # ²alto_pico_mm, ³largo_aleta_mm ``` --- # 2.6. Rename Este argumento sirve para cambiar el nombre de varias columnas. El nuevo nombre se pone primero y luego se pone el nombre anterior. ```r Pingus %>% rename(peso=masa_corporal_g, temporada=anio) ``` ``` ## # A tibble: 344 × 9 ## especie_isla especie isla largo…¹ alto_…² largo…³ peso sexo tempo…⁴ ## <chr> <chr> <chr> <dbl> <dbl> <int> <int> <fct> <int> ## 1 Adelia: Torgersen Adelia " Torg… 39.1 18.7 181 3750 macho 2007 ## 2 Adelia: Torgersen Adelia " Torg… 39.5 17.4 186 3800 hemb… 2007 ## 3 Adelia: Torgersen Adelia " Torg… 40.3 18 195 3250 hemb… 2007 ## 4 Adelia: Torgersen Adelia " Torg… NA NA NA NA <NA> 2007 ## 5 Adelia: Torgersen Adelia " Torg… 36.7 19.3 193 3450 hemb… 2007 ## 6 Adelia: Torgersen Adelia " Torg… 39.3 20.6 190 3650 macho 2007 ## 7 Adelia: Torgersen Adelia " Torg… 38.9 17.8 181 3625 hemb… 2007 ## 8 Adelia: Torgersen Adelia " Torg… 39.2 19.6 195 4675 macho 2007 ## 9 Adelia: Torgersen Adelia " Torg… 34.1 18.1 193 3475 <NA> 2007 ## 10 Adelia: Torgersen Adelia " Torg… 42 20.2 190 4250 <NA> 2007 ## # … with 334 more rows, and abbreviated variable names ¹largo_pico_mm, ## # ²alto_pico_mm, ³largo_aleta_mm, ⁴temporada ``` --- # 2.7. Relocate Este argumento sirve para mover columnas al inicio del data frame. ```r Pingus %>% relocate(sexo, anio) ``` ``` ## # A tibble: 344 × 9 ## sexo anio especie_isla especie isla largo…¹ alto_…² largo…³ masa_…⁴ ## <fct> <int> <chr> <chr> <chr> <dbl> <dbl> <int> <int> ## 1 macho 2007 Adelia: Torgersen Adelia " Tor… 39.1 18.7 181 3750 ## 2 hembra 2007 Adelia: Torgersen Adelia " Tor… 39.5 17.4 186 3800 ## 3 hembra 2007 Adelia: Torgersen Adelia " Tor… 40.3 18 195 3250 ## 4 <NA> 2007 Adelia: Torgersen Adelia " Tor… NA NA NA NA ## 5 hembra 2007 Adelia: Torgersen Adelia " Tor… 36.7 19.3 193 3450 ## 6 macho 2007 Adelia: Torgersen Adelia " Tor… 39.3 20.6 190 3650 ## 7 hembra 2007 Adelia: Torgersen Adelia " Tor… 38.9 17.8 181 3625 ## 8 macho 2007 Adelia: Torgersen Adelia " Tor… 39.2 19.6 195 4675 ## 9 <NA> 2007 Adelia: Torgersen Adelia " Tor… 34.1 18.1 193 3475 ## 10 <NA> 2007 Adelia: Torgersen Adelia " Tor… 42 20.2 190 4250 ## # … with 334 more rows, and abbreviated variable names ¹largo_pico_mm, ## # ²alto_pico_mm, ³largo_aleta_mm, ⁴masa_corporal_g ``` --- # 2.8 ggplot() Noten que se pueden **encadenar** funciones y crear graficos. ```r Pingus %>% filter(sexo=='hembra') %>% ggplot(aes(x = largo_pico_mm)) + geom_histogram() ``` --- class: inverse # Ejercicios
Usar funciones de tidyverse - left_join() - pivot_longer() - pivot_wider() --- ## 2.9. Ejercicios ### left_join() Datos inventados. ```r ID<-c("ID01","ID02","ID03","ID04","ID05", "ID06","ID07","ID08","ID09","ID10") Pesos<-c(1.5,2.0,3.5,4.1,2.6,3.7,8.9,2.5,6.3,1.0) Pesticidas<-c(10,20,35,1,6,3,8,2,3,1) ``` Datos del laboratorio. ```r Laboratorio<-data.frame(ID,Pesticidas) ``` Datos de campo. ```r Libreta <- data.frame(ID,Pesos) ``` DatosJuntos. ```r DatosJuntos<-left_join(Libreta, Laboratorio, * by = "ID") ``` --- ## 2.9. Ejercicios ### pivot_longer Datos inventados de 5 especies y sus riquezas. ```r Especies<-c('Especie1','Especie2','Especie3','Especie4','Especie5') Anio2010<-c(5,4,5,6,7) Anio2011<-c(3,2,1,9,4) Anio2012<-c(6,2,3,7,8) ``` Un nuevo data frame. ```r EspecieAnio<-data.frame(Especie=Especies,Anio2010=Anio2010,Anio2011=Anio2011,Anio2012) ``` ```r head(EspecieAnio) ``` Este argumento me permite reorganizarlas. ```r EspeciesLargo <- EspecieAnio %>% pivot_longer(c(Anio2010, Anio2011, Anio2012), names_to = "Anio", values_to = "Riqueza" ) EspeciesLargo ``` --- name: exportar class: title-slide, middle, center background-image: url(https://images.unsplash.com/photo-1527402858-36f052d83df4?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1267&q=80) background-size: cover # Exportar --- # 3. Exportar Igual que los argumentos para importar tus datos (read_csv), cada uno tiene su contra parte para exportarlos. - write_csv() - write_csv2() - write_tsv() - write_delim() --- class: inverse # Ejercicios
1- Define una carpeta. ```r library(here) ResultsFolder<-here::here("Clase3 wrangling") ``` 2- Exporta tu tabla. ```r write_csv( DatosJuntos, file =paste0(ResultsFolder,'/DatosJuntos.csv')) ``` --- # 4. Continuar aprendiendo Usar [CheatSheet](https://dplyr.tidyverse.org/), que son acordeones para tener la información mas a la mano. Realizar [ejercicios](https://allisonhorst.shinyapps.io/edge-of-the-tidyverse/#section-wrangling-in-dplyr). En R> <img src="https://raw.githubusercontent.com/MiriamLL/Curso_CIAD/main/Figuras/dplyrcheatsheet.jpg" height="300" /> --- class: inverse # Recapitulando Esta clase: - Funciones de [filter](#filt), [mutate](#muta), [summarise](#suma), [unique](#unique), [drop_na](#drop). - [Unir data frames](#join). - [Exportar data frames](#exportar) Siguiente clase: - Trabajar por proyectos .right[ #### Contacto Para dudas, comentarios y sugerencias: <br> Escríbeme a miriamjlerma@gmail.com Este material esta accesible <br> y se encuentra en mi [
github](https://github.com/MiriamLL/Curso_CIAD/)<br> y mi [
página](https://www.miriam-lerma.com) ] <h1> .right[ [
](https://www.miriam-lerma.com/teaching.html) ]</h1>