Capítol 9 Alternativas Tydiverse
El universo de Tydiverse consiste en una colección de packages de R orientados al Data Science. Se recomienda la consulta del libro online R para Ciencia de Datos.
El package dplyr, al igual que ggplot2, está desarrollado por Hadley Wickham. Este paquete, supone un cambio de filosofía en la forma de trabajar con los datos y se está transformando en un nuevo estándar en R.
9.1 Dplyr: arrange, filter, select
arange
: Ordena los registros de un data frame.filter
: Filtra a partir de un conjunto condiciones lógicas.select
: Selecciona las variables.
Paises asiaticos con PIB per cápita inferior a 1000 $ en 2007.
<- paises07 %>%
pais07dplyr arrange(desc(esperanza_de_vida)) %>%
filter(continente=='Asia' & pib_per_capita < 1000) %>%
::select(pais,esperanza_de_vida,pib_per_capita)
dplyr
kable(pais07dplyr)
pais | esperanza_de_vida | pib_per_capita |
---|---|---|
Myanmar | 62.069 | 944.0000 |
Afganistán | 43.828 | 974.5803 |
Las 3 comparten el hecho que no necesitan de comillas para referirse a las variables. También utilizan el operador %>%
llamado pipe. Éste sustituye el parámetro de entrada de datos. De esta forma, permite escribir las operaciones de izquierda a derecha facilitando así su lectura.
9.2 Dplyr: mutate, group_by, summarise
mutate
: Crea o modifica las variables del data frame.group_by
: Especifica una o varias variables de agrupación.summarise
: define los agregados de las variables originales.
Esperanza de vida y PIB per cápita medio por continente y año.
<- paises %>%
continentes_anio arrange(continente,anio) %>%
mutate(esperanza_de_vida_total = esperanza_de_vida * poblacion
pib_total = pib_per_capita * poblacion) %>%
, group_by(continente,anio) %>%
::summarize(n_paises=n()
dplyresperanza_de_vida = sum(esperanza_de_vida_total ) /
, sum(poblacion )
pib_per_capita = sum(pib_total) /
, sum(poblacion)
poblacion = sum(poblacion))
,
kable(continentes_anio %>% head(10))
continente | anio | n_paises | esperanza_de_vida | pib_per_capita | poblacion |
---|---|---|---|---|---|
África | 1952 | 52 | 38.79973 | 1311.221 | 237640501 |
África | 1957 | 52 | 40.94031 | 1444.952 | 264837738 |
África | 1962 | 52 | 43.09925 | 1540.599 | 296516865 |
África | 1967 | 52 | 45.17721 | 1774.847 | 335289489 |
África | 1972 | 52 | 47.21229 | 2063.171 | 379879541 |
África | 1977 | 52 | 49.20883 | 2244.799 | 433061021 |
África | 1982 | 52 | 51.01744 | 2295.192 | 499348587 |
África | 1987 | 52 | 52.82479 | 2180.764 | 574834110 |
África | 1992 | 52 | 53.37292 | 2071.615 | 659081517 |
África | 1997 | 52 | 53.28327 | 2098.865 | 743832984 |
Para la evolución de los continentes en ggplot2, es útil el geom_path()
ggplot(continentes_anio, aes(x=pib_per_capita
y=esperanza_de_vida
, color =continente)) +
, geom_path() +
scale_x_log10() +
geom_text_repel(aes(label=anio), size=2, color="black") +
labs(title="Evolución continentes (ponderado)")

Figura 9.1: Fuente: Elaboración propia con datos de Gapminder
9.3 Actividad guiada 1.4.
Vamos a incorporar los gráficos de evolución de los continentes en el informe teniendo en cuenta los siguientes cambios:
- Recodifica Oceanía como Asia y Modifica los colores de los continentes.
- Utiliza la paleta de colores de la actividad guiada 1.3.
Observa:
- Se ha utilizado dplyr: arrange,mutate,group_by y summarize.
- Se ha utilizado geom_path.
9.4 Actividad guiada 1.4
library(knitr)
library(datos)
suppressPackageStartupMessages(library(tidyverse))
library(ggrepel)
::opts_chunk$set(echo = TRUE)
knitr
<- paises
paises_informe # Recodifica Oceanía por Asia
$continente[paises_informe$continente=="Oceanía"] <- "Asia"
paises_informe# Elimina Oceanía de los levels
$continente <- factor(paises_informe$continente)
paises_informe# Paleta de colores
<- c("blue","green", "red", "yellow")
colores_continente names(colores_continente) <- c("África", "Américas", "Asia", "Europa")
# Etiquetas
<- c("España","China","Etiopía","Canadá")
etiquetas_paises # funcion describir
<- function(data, colores, etiquetas) {
describir
# filtra paises con etiqueta
<- data[data$pais %in% etiquetas, ]
data_etiquetas
# Agrega continentes
<- data %>%
data_continente arrange(continente, anio) %>%
mutate(esperanza_de_vida_total = esperanza_de_vida * poblacion
pib_total = pib_per_capita * poblacion) %>%
, group_by(continente, anio) %>%
::summarize(n_paises=n()
dplyresperanza_de_vida = sum(esperanza_de_vida_total ) /
, sum(poblacion )
pib_per_capita = sum(pib_total) /
, sum(poblacion)
poblacion = sum(poblacion))
,
<- list()
resultados
"continentes"]] <- ggplot(data_continente, aes(x=pib_per_capita, y=esperanza_de_vida
resultados[[color=continente)) +
, geom_path() +
scale_x_log10() +
scale_colour_manual(values = colores) +
geom_text_repel(aes(label=anio), size=2, color="black") +
labs(title="Evolución de los Continentes de 1952 a 2007"
x = "Logaritmo base 10 del PIB per cápita ($ americanos, ajustados según inflación)"
, y = "Esperanza de vida (años)")
,
return(resultados)
}<- describir(paises_informe, colores_continente, etiquetas_paises) resumen
## `summarise()` regrouping output by 'continente' (override with `.groups` argument)
9.4.1 Evolución de los continentes

Figura 9.2: Evolución continentes (Fuente: Elaboración propia con datos de Gapminder)
El gráfico muestra la traza que han recorrido los continentes en sus valores medios de PIB per cápita y Esperanza de vida. Se confirma la mayor progresión de Asia. Vemos que como América y Europa, en media tienen un comportamiento bastante paralelo. Se observa como el recorrido de África, aunque partiendo de valores muy inferiores, ha sido positiva y ha incrementado de forma similar el resto de continentes.