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
Primero lo haremos paso por paso y luego convertiremos todo en el flujo de unos cuantos pipes.
(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
(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
(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
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.
(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.
Hay tres maneras: 1) anidado, 2) por objetos intermedios y 3) pipes
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
¿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
¿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