## Recapitulación

```{r xaringan-themer, include=FALSE, warning=FALSE}
library(tidyverse)
library(xaringanthemer)
style_duo_accent(primary_color ="#87A96B", secondary_color ="#DC143C",
                 background_color = "#f8f7f3",
                 header_font_google = google_font("Archivo"),
                 text_font_google   = google_font("Inconsolata"), 
                 link_color= "#704848"
)
```


<br>

- Universo `tidyverse`

  - Importar datos con `readr`
  
  - Bases de datos "modernas" con `tibble`
  
  - ordenar, seleccionar, filtrar con`dplyr`

---

## Hoy hablaremos de ...

- Creación y transformación de datos con `dplyr`

- Manipulación de datos agrupados con `dplyr`

- Resumen de datos con `dplyr`

---

class: center, middle

![](images/tidyverse_packs.png)


---

class: fullscreen, left, middle, text-black
background-image: url("images/typewriter.jpg")

##dplyr

---

## dplyr: herramientas intuitivas para manipulación de datos

<br>

.pull-left[
  ![dplyr](images/dplyr.png)
]

.pull-right[
`dplyr` permite:

- ordenar datos

- filtrar casos 

- seleccionar variables

- __crear y transformar variables__

- agrupar datos

- crear resumen estadísticos
]


---
class: inverse, center, middle


##dplyr::mutate()


---

## mutate: creación de datos

La función `mutate()` permite crear y transformar variables. Equivalente a `gen` en `Stata` o `compute` en `Spss`.

Continuando con los datos de la encuesta Casen 2017, esta es la vista no-ordenada de los datos:

--

```{r, echo=FALSE, message=FALSE}
library("readr") 

setwd("/Users/Mauricio/Library/Mobile Documents/com~apple~CloudDocs/Teaching/ISUC/2023_2_data_analysis_r/repo/slides/class_6")

# leer archivo csv
data_casen_csv <- read_csv("sample_casen2017.csv")
```

```{r, message=FALSE}
library("tidyverse")
data_casen_csv %>% select(sexo,edad,ytotcor)
```

---

## mutate: creación de datos

Supongamos que queremos agregar una variable que indica el año de la encuesta:

--

```{r, message=FALSE}
data_casen_csv %>% select(sexo,edad,ytotcor) %>% mutate(anno = 2017)
```


---

## mutate: creación de datos

También podemos crear nuevas variables en base a variables existentes:
--

```{r, message=FALSE}
data_casen_csv %>% select(sexo,edad,ytotcor) %>% mutate(ytotcor_mm = log(ytotcor/1000) + 1)
```

---
## mutate, if_else: creación de datos

También podemos crear nuevas variables en función de valores de variable(s) existente(s).
--
 La función `if_else()` es conveniente para casos simples. Por ejemplo:

.pull-left[
```{r, message=FALSE}
data_casen_csv %>% select(sexo,edad,ytotcor) %>% 
  mutate(sexo = if_else(sexo==1,1,0)) #<<
```
]

--

.pull-right[
 
- Estructura: `if_else(condición, si cumple, si no cumple )`
 
- Notar que es posible reemplazar la variable existente. 

- Lo mismo se podría escribir así:

```{r, message=FALSE, eval=FALSE}
data_casen_csv %>% select(sexo,edad,ytotcor) %>% 
  mutate(sexo = if_else(sexo==1,sexo,0)) #<<
```


]
---

## mutate, cases_when: creación de datos

La función `cases_when()` permite crear una nueva variable en base al valor(es) de otra(s) variable(s).
--
 Más cómodo que `if_else()` cuando la condición es complexa.

```{r, message=FALSE}
data_casen_csv %>% select(sexo,edad,ytotcor) %>% 
  mutate(edad_cat = case_when(edad <= 18 ~ 1, #<<
                              edad >18 & edad<=65 ~ 2, #<<
                              edad > 65  ~ 3) #<<
                              )
```

---

## mutate, cases_when: creación de datos

- Estructura: `case_when(condición1 ~ valor1, condicion2 ~ valor2, ... )`
 
- Casos que no cumplen ninguna condición son asignados automáticamente como `NA`.

- Asignación de casos que no cumplen ninguna condición se puede controlar: 


```{r, message=FALSE, eval=FALSE}
data_casen_csv %>% select(sexo,edad,ytotcor) %>% 
  mutate(edad_cat = case_when(edad <= 18 ~ 1,
                              edad >18 & edad<=65 ~ 2, 
                              edad > 65  ~ 3, 
                              TRUE ~ edad) #<<
                              )
```

- En este caso la condición es: casos que no cumplen condición mantienen los valores de la variable original `edad`.

-  Otras funciones útiles aquí: https://dplyr.tidyverse.org/reference/mutate.html

---
class: inverse, center, middle

##dplyr::group_by()


---
## group_by: operaciones agrupadas.

Supongamos que queremos agregar un nueva variable que calcule la cantidad de personas por region y la edad promedio por region. `group_by()` es una herramienta muy conveniente para realizar este tipo de operaciones.

--

```{r}
data_casen_csv %>% 
  group_by(region) %>% #<<
  mutate(n_region = n(), mean_ytotcor_region = mean(ytotcor, na.rm = T)) %>% #<<
  #ungroup() %>% #<<
  select(region,sexo,edad, ytotcor,n_region, mean_ytotcor_region) 
```

---
## group_by: operaciones agrupadas

Es posible agrupar por más de una variable ....
Por ejemplo, calcule ahora la cantidad hombres y mujeres por region y la edad promedio por region y genero.


--

```{r}
data_casen_csv %>% 
  group_by(region, sexo) %>% #<<
  mutate(n_region = n(), mean_ytotcor_region = mean(ytotcor, na.rm = T)) %>% #<<
  #ungroup() %>% #<<
  select(region,sexo,edad, ytotcor,n_region, mean_ytotcor_region)
```


---
class: fullscreen,left, top, top, text-azzurro
background-image: url("images/bicicleta.jpg")

###R se aprende]
###usando y]
###preguntando]

---

![](images/stack-exchange-search.png)

---
class: inverse, middle

Presentación y código en GitHub: <https://github.com/mebucca/dar_soc4001>

---
class: inverse, center, middle

##Gracias!

<br>
Mauricio Bucca <br>
https://mebucca.github.io/ <br>
github.com/mebucca





