library(dplyr)
## Warning: package 'dplyr' was built under R version 4.0.4
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readxl)
## Warning: package 'readxl' was built under R version 4.0.4
gapminder <- read_xlsx("data/gapminder.xlsx")
gapminder
## # A tibble: 1,704 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <chr>       <chr>     <dbl>   <dbl>    <dbl>     <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.
##  7 Afghanistan Asia       1982    39.9 12881816      978.
##  8 Afghanistan Asia       1987    40.8 13867957      852.
##  9 Afghanistan Asia       1992    41.7 16317921      649.
## 10 Afghanistan Asia       1997    41.8 22227415      635.
## # ... with 1,694 more rows

#Pipes con dplyr 10.06.21

obtener el ranking del promedio del PBI nacional para cada uno de los cinco continentes en los años 1987 y 2007

Primero lo haremos paso por paso y luego convertiremos todo en el flujo de unos cuantos pipes.

creo gapminder_modificado ay que sólo necesito los años 1987 y 2007, filtro mis datos. filter para seleccionar filas

(gapminder_modificado <- filter(gapminder, year %in% c(1987, 2007)))
## # A tibble: 284 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <chr>       <chr>     <dbl>   <dbl>    <dbl>     <dbl>
##  1 Afghanistan Asia       1987    40.8 13867957      852.
##  2 Afghanistan Asia       2007    43.8 31889923      975.
##  3 Albania     Europe     1987    72    3075321     3739.
##  4 Albania     Europe     2007    76.4  3600523     5937.
##  5 Algeria     Africa     1987    65.8 23254956     5681.
##  6 Algeria     Africa     2007    72.3 33333216     6223.
##  7 Angola      Africa     1987    39.9  7874230     2430.
##  8 Angola      Africa     2007    42.7 12420476     4797.
##  9 Argentina   Americas   1987    70.8 31620918     9140.
## 10 Argentina   Americas   2007    75.3 40301927    12779.
## # ... with 274 more rows

selecciono sólo con las variables que necesito. En este caso son continente, año, PBI per cápita y población. Select para seleccionar columnas

(gapminder_modificado <- select(gapminder_modificado, 
                               continent, year, gdpPercap, pop) )
## # A tibble: 284 x 4
##    continent  year gdpPercap      pop
##    <chr>     <dbl>     <dbl>    <dbl>
##  1 Asia       1987      852. 13867957
##  2 Asia       2007      975. 31889923
##  3 Europe     1987     3739.  3075321
##  4 Europe     2007     5937.  3600523
##  5 Africa     1987     5681. 23254956
##  6 Africa     2007     6223. 33333216
##  7 Africa     1987     2430.  7874230
##  8 Africa     2007     4797. 12420476
##  9 Americas   1987     9140. 31620918
## 10 Americas   2007    12779. 40301927
## # ... with 274 more rows

usando mutate, debo obtener el PBI nacional multiplicando el PBI per cápita por la población.

(gapminder_modificado <- mutate(gapminder_modificado,
                               PBI_nacional = pop * gdpPercap) )
## # A tibble: 284 x 5
##    continent  year gdpPercap      pop  PBI_nacional
##    <chr>     <dbl>     <dbl>    <dbl>         <dbl>
##  1 Asia       1987      852. 13867957  11820990309.
##  2 Asia       2007      975. 31889923  31079291949.
##  3 Europe     1987     3739.  3075321  11498418358.
##  4 Europe     2007     5937.  3600523  21376411360.
##  5 Africa     1987     5681. 23254956 132119742845.
##  6 Africa     2007     6223. 33333216 207444851958.
##  7 Africa     1987     2430.  7874230  19136019189.
##  8 Africa     2007     4797. 12420476  59583895818.
##  9 Americas   1987     9140. 31620918 289004799539.
## 10 Americas   2007    12779. 40301927 515033625357.
## # ... with 274 more rows

Ahora que tengo el PBI nacional, puedo obtener el promedio por año y continente.Obtengo informacion agrupada para cada continente y año formar un grupo

gapminder_modificado <- group_by(gapminder_modificado, continent, year)
gapminder_modificado <- summarise(gapminder_modificado, promedio = mean(PBI_nacional))
## `summarise()` has grouped output by 'continent'. You can override using the `.groups` argument.
(gapminder_modificado <- ungroup(gapminder_modificado) )
## # A tibble: 10 x 3
##    continent  year      promedio
##    <chr>     <dbl>         <dbl>
##  1 Africa     1987  24107264108.
##  2 Africa     2007  45778570846.
##  3 Americas   1987 439447790357.
##  4 Americas   2007 776723426068.
##  5 Asia       1987 241784763369.
##  6 Asia       2007 627513635079.
##  7 Europe     1987 316507473546.
##  8 Europe     2007 493183311052.
##  9 Oceania    1987 209451563998.
## 10 Oceania    2007 403657044512.

Ahora sólo me falta ordenar mis datos de manera descendente según el promedio del PBI

(gapminder_modificado <- arrange(gapminder_modificado, year, desc(promedio)))
## # A tibble: 10 x 3
##    continent  year      promedio
##    <chr>     <dbl>         <dbl>
##  1 Americas   1987 439447790357.
##  2 Europe     1987 316507473546.
##  3 Asia       1987 241784763369.
##  4 Oceania    1987 209451563998.
##  5 Africa     1987  24107264108.
##  6 Americas   2007 776723426068.
##  7 Asia       2007 627513635079.
##  8 Europe     2007 493183311052.
##  9 Oceania    2007 403657044512.
## 10 Africa     2007  45778570846.

Rpta. Con el flujo de análisis terminado, puedo verificar que en esos 20 años, Asia superó a Europa en el promedio de su PBI nacional.

#Reescribiendo el flujo con pipes

##Primero tomo gapminder, luego filtro años, luego selecciono variables, luego creo pbi nacional, luego agrupo, luego obtengo resultado de promedio, luego desagrupo, luego organizo por año en f ascendente y por promedio en desc.

gapminder %>% 
  filter(year %in% c(1987, 2007)) %>%
  select(continent, year, gdpPercap, pop) %>% 
  mutate(PBI_nacional = pop * gdpPercap) %>% 
  group_by(continent, year) %>% 
  summarise(promedio = mean(PBI_nacional)) %>% 
  ungroup() %>% 
  arrange(year, desc(promedio))
## `summarise()` has grouped output by 'continent'. You can override using the `.groups` argument.
## # A tibble: 10 x 3
##    continent  year      promedio
##    <chr>     <dbl>         <dbl>
##  1 Americas   1987 439447790357.
##  2 Europe     1987 316507473546.
##  3 Asia       1987 241784763369.
##  4 Oceania    1987 209451563998.
##  5 Africa     1987  24107264108.
##  6 Americas   2007 776723426068.
##  7 Asia       2007 627513635079.
##  8 Europe     2007 493183311052.
##  9 Oceania    2007 403657044512.
## 10 Africa     2007  45778570846.

Conclusion

Hay tres maneras: 1) anidado, 2) por objetos intermedios y 3) pipes

Ejercicio 1

Utilizando gapminder y las funciones de dplyr, obtén el ranking del PBI nacional de Perú, México, Colombia y Chile en los años 1967, 1987 y 2007.

gapminder %>% 
  filter(country %in% c("Peru", "Mexico", "Colombia", "Chile")) %>% 
  filter(year %in% c(1967, 1987, 2007)) %>% 
  select(country, year, pop, gdpPercap) %>% 
  mutate(PBI_nacional = pop * gdpPercap) %>% 
  group_by(year) %>% 
  arrange(year, desc(PBI_nacional)) %>% 
  ungroup()
## # A tibble: 12 x 5
##    country   year       pop gdpPercap PBI_nacional
##    <chr>    <dbl>     <dbl>     <dbl>        <dbl>
##  1 Mexico    1967  47995559     5755.      2.76e11
##  2 Peru      1967  12132200     5788.      7.02e10
##  3 Colombia  1967  19764027     2679.      5.29e10
##  4 Chile     1967   8858908     5107.      4.52e10
##  5 Mexico    1987  80122492     8688.      6.96e11
##  6 Colombia  1987  30964245     4903.      1.52e11
##  7 Peru      1987  20195924     6361.      1.28e11
##  8 Chile     1987  12463354     5547.      6.91e10
##  9 Mexico    2007 108700891    11978.      1.30e12
## 10 Colombia  2007  44227550     7007.      3.10e11
## 11 Chile     2007  16284741    13172.      2.14e11
## 12 Peru      2007  28674757     7409.      2.12e11

Ejercicio 2

¿Qué continentes tuvieron la mejor y peor expectativa de vida mediana en 1992?

gapminder %>% 
  filter (year == 1992) %>% 
  select(continent, lifeExp) %>% 
group_by(continent) %>% 
summarise(mediana = median(lifeExp)) %>% 
  ungroup() %>% 
arrange(desc(mediana))
## # A tibble: 5 x 2
##   continent mediana
##   <chr>       <dbl>
## 1 Oceania      76.9
## 2 Europe       75.5
## 3 Americas     69.9
## 4 Asia         68.7
## 5 Africa       52.4

Rpta. La mejor fue Oceania con 76.945 y la peor fue Africa con 52.429

Ejercicio 3

¿Qué continente tuvo el mayor porcentaje de países con expectativa de vida superior a la mediana mundial en 2007?

gapminder %>% 
  filter(year == 2007) %>% 
mutate(mediana_mundial = median(lifeExp), mayor_que_mediana = lifeExp > mediana_mundial) %>% 
  group_by(continent) %>% 
  summarise(n_paises = n(), n_paises_mayores_que_mediana = sum(mayor_que_mediana)) %>% 
  ungroup() %>% 
  mutate(porcentaje_paises_mayores = n_paises_mayores_que_mediana/n_paises*100) %>% 
  arrange(desc(porcentaje_paises_mayores))
## # A tibble: 5 x 4
##   continent n_paises n_paises_mayores_que_mediana porcentaje_paises_mayores
##   <chr>        <int>                        <int>                     <dbl>
## 1 Oceania          2                            2                    100   
## 2 Europe          30                           29                     96.7 
## 3 Americas        25                           17                     68   
## 4 Asia            33                           18                     54.5 
## 5 Africa          52                            5                      9.62

Rpta.- El continente que tuvo mayor porcentaje de paises con exp. de vida mayor que la mediana mundial en 2007 es Oceania. En segundo lugar se encuentra Europa

Fin sesion jueves 10.06