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


## Recapitulación
<br>

- Bases de datos ordenadas ("tidy")

- Datos "largos" y datos "anchos"

- Transformación entre datos largos y anchos


---

## Hoy hablaremos de ...
<br>

- Tratamiento de datos faltantes


---

class: center, middle

![](images/tidyverse_packs.png)


---

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

.huge[#tidyr]

---

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

<br>

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

.pull-right[
`tidyr` permite:

- obtener un bases de datos "tidy"

]

---
class: inverse, center, middle


.bold[*“Las familias felices son todas iguales, pero cada familia infeliz es infeliz a su manera.”*]

  -Leo Tolstoy

<br>

.bold[*“Tidy datasets son todas iguales, cada dataset desordenaro es desordenado a su manera.”*]

  – Hadley Wickham (creador de Tidyverse)


---
## Bases de datos ordenadas ("tidy") 

```{r, echo=FALSE, message=F, warning=F}
library("tidyverse")
library("janitor")
library("readr") 

va_messy <-read.delim("https://raw.githubusercontent.com/mebucca/dar_soc4001/master/slides/class_10/value_added_agricultue.csv", sep= ";")
va_messy
```

---
class: inverse, center, middle

##tidyr::complete()

---
## Valores perdidos implícitos


```{r,echo=FALSE}
va_data <- va_messy %>% row_to_names(row_number = 1) %>% 
  rename(country = 1) %>% 
  mutate(across(`1800`:`1938`, ~ as.character(.x))) %>% 
  pivot_longer(cols = -c("country"), names_to = "year", values_to = "added_value") %>% 
  mutate(added_value = if_else(added_value == "", NA_character_,added_value)) %>% 
  drop_na(added_value) %>%
  arrange(year,country)
va_data 
```

<br>
--

- Diferente número de años disponibles para cada país

---
## Valores perdidos implícitos

- Datos contienen valores perdidos "implícitos"

- `complete()` valores perdidos "implícitos" en valores perdidos "explícitos"

--

.pull-left[
```{r}
va_data  <- 
  va_data %>% mutate(added_value =  gsub(",", ".", added_value) ) %>%
     mutate(added_value =  as.numeric(added_value) )

va_data 
```
]

--

.pull-right[
```{r}
va_data %>% complete(country,year) #<<
```
]

---
## Completar datos incompletos

- También es posible hacer asignar un valor a  valores perdidos "implícitos".

--

.pull-left[
```{r}
va_data 
```
]

--

.pull-right[
```{r}
va_data %>% complete(country,year, 
            fill = list(added_value = 0)) #<<
```
]

---
class: inverse, center, middle

##tidyr::fill()


---
## Completa valores perdidos


<br>

- `fill()` rellena los valores perdidos en columna selecciona usando datos de la observación siguiente o anterior.

--

- Útil cuando en bases de datos los valores no se repiten y la variable sólo tiene registro cuando valores cambian.

--

- En dichos casos los valores perdidos significan, implícitamente, que no hay cambio en los valores de una variable.




---
## Completa valores perdidos

.pull-left[
```{r}
va_data %>% complete(country,year) %>% 
  filter(country=="Austria", year > 1913)
```
]

--

.pull-right[
```{r}
va_data %>% complete(country,year) %>% 
  filter(country=="Austria", year > 1913) %>%
  fill(added_value, .direction = c("down")) #<<
```
]

---
## Completa valores perdidos

.pull-left[
```{r}
va_data %>% complete(country,year) %>% 
  filter(country=="Austria", year > 1913)
```
]

--

.pull-right[
```{r}
va_data %>% complete(country,year) %>% 
  filter(country=="Austria", year > 1913) %>%
  fill(added_value, .direction = c("up")) #<<
```
]

---
## Completa valores by group


.pull-left[
```{r}
va_data %>% complete(country,year) %>% 
  filter( (country=="Argentina" & year > 1934) | (country=="Australia" & year < 1804) )
```
]

--


.pull-left[
```{r}
va_data %>% complete(country,year) %>% 
  filter( (country=="Argentina" & year > 1934) | (country=="Australia" & year < 1804) ) %>%
  fill(added_value, .direction = c("down")) #<<
```
]

--

- Cuidado! Esto no es lo que buscamos. 

---
## Completa valores by group

Combinando `fill()` con `group_by()` podemos evitar el problema anterior:


.pull-left[
```{r}
va_data %>% complete(country,year) %>% 
  filter( (country=="Argentina" & year > 1934) | (country=="Australia" & year < 1804) ) %>%
  fill(added_value, .direction = c("down")) 
```
]

--


.pull-left[
```{r}
va_data %>% complete(country,year) %>% 
  filter( (country=="Argentina" & year > 1934) | (country=="Australia" & year < 1804) ) %>%
  group_by(country) %>% #<<
  fill(added_value, .direction = c("down")) #<<
```
]

---
class: inverse, center, middle

##tidyr::drop_na()

---
## Remover valores perdidos controladamente

```{r, echo=F}
dummy_data <- va_data %>% complete(country,year) %>% 
  filter(country=="Austria", year > 1913) %>% 
  mutate(y = c(NA,NA,sample(1:32,23)))
```

--
.pull-left[
```{r}
dummy_data
```
]


.pull-left[
Remueve filas con valores perdidos en "cualquier" variable de la base de datos

```{r}
dummy_data %>% drop_na() #<<
```
]

---
class: inverse, center, middle

##tidyr::drop_na()

---
## Remover valores perdidos controladamente

.pull-left[
```{r}
dummy_data
```
]

--


.pull-left[
Remueve filas con valores perdidos una variable específica

```{r}
dummy_data %>% drop_na(added_value) #<<
```
]

---
## Remover valores perdidos controladamente

.pull-left[
```{r}
dummy_data
```
]

--


.pull-left[
Remueve filas con valores perdidos en cualquier varible dentro de una selección de columnas (`starts_with()`, `ends_with()`, etc)

```{r}
dummy_data %>% drop_na(ends_with("y")) #<<
```
]



---
class: inverse, center, middle

##tidyr::replace_na()

---
## Reemplazar valores perdidos controladamente

.pull-left[
```{r}
dummy_data
```
]

--

.pull-left[
Reemplazar valores perdidos con valores especificados para diferentes variables
```{r}
dummy_data %>% 
  replace_na(list(country = "Hola", #<< 
                  added_value = 0, #<<
                  y = 999)) #<<
```
]


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

.huge[#R se aprende]
.huge[#usando y]
.huge[#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

.huge[
**Gracias!**
]

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





