library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.3     ✓ purrr   0.3.4
## ✓ tibble  3.1.1     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(gapminder)

En esta sesión aprenderás a:

Modificar las variables de nuestro conjunto de datos con mutate(). Resumir nuestros datos en valores representativos con summarise(). Agrupar nuestros datos para operar en ellos con group_by().

Adicionalmente, aprenderás a usar el operador pipe (%>%), que permite combinar todas las operaciones en un solo flujo

gapminder_subset Para entender lo que sucede con estas funciones, crearemos el conjunto gapminder_subset. Obtenemos observaciones para cuatro países en dos años observados.

gapminder_subset <- filter(gapminder, 
       country %in% c("Peru", "Mexico", "United Kingdom", "France"), 
       year >= 2002)
gapminder_subset
## # A tibble: 8 x 6
##   country        continent  year lifeExp       pop gdpPercap
##   <fct>          <fct>     <int>   <dbl>     <int>     <dbl>
## 1 France         Europe     2002    79.6  59925035    28926.
## 2 France         Europe     2007    80.7  61083916    30470.
## 3 Mexico         Americas   2002    74.9 102479927    10742.
## 4 Mexico         Americas   2007    76.2 108700891    11978.
## 5 Peru           Americas   2002    69.9  26769436     5909.
## 6 Peru           Americas   2007    71.4  28674757     7409.
## 7 United Kingdom Europe     2002    78.5  59912431    29479.
## 8 United Kingdom Europe     2007    79.4  60776238    33203.

Mutate

mutate() Esta función se usa para modificar las variables de nuestro conjunto de datos, ya sea para transformar una variable existente o para crear una nueva. Debemos identificar dos cosas:

El nombre del conjunto de datos El nombre de la variable objetivo y la operación necesaria para crearla y modificarla.

La operación debe hacerse en una variable existente. Si la variable objetivo ya existe en el conjunto de datos, la será sobreescrita.

mutate(data, var_objetivo = operacion(var_existente))

Nueva variable En gapminder_subset contamos con información del PBI per cápita y población. Multiplicando ambas podemos tener el PBI total de un país para determinado año.

mutate(gapminder_subset, pbi_total = pop * gdpPercap)
## # A tibble: 8 x 7
##   country        continent  year lifeExp       pop gdpPercap pbi_total
##   <fct>          <fct>     <int>   <dbl>     <int>     <dbl>     <dbl>
## 1 France         Europe     2002    79.6  59925035    28926.   1.73e12
## 2 France         Europe     2007    80.7  61083916    30470.   1.86e12
## 3 Mexico         Americas   2002    74.9 102479927    10742.   1.10e12
## 4 Mexico         Americas   2007    76.2 108700891    11978.   1.30e12
## 5 Peru           Americas   2002    69.9  26769436     5909.   1.58e11
## 6 Peru           Americas   2007    71.4  28674757     7409.   2.12e11
## 7 United Kingdom Europe     2002    78.5  59912431    29479.   1.77e12
## 8 United Kingdom Europe     2007    79.4  60776238    33203.   2.02e12

Hemos logrado calcular una nueva variable en base a otras ya existentes.

Ya que la población es un número bastante grande, R nos muestra el tibble en notación científica (1.73e12 significa que el punto decimal ha sido “adelantado” 12 cifras).

Constantes Ten en cuenta que si la operación retorna un solo valor, este será repetido en todas las filas de esa variable.

mutate(gapminder_subset, maxima_pob = max(pop))
## # A tibble: 8 x 7
##   country        continent  year lifeExp       pop gdpPercap maxima_pob
##   <fct>          <fct>     <int>   <dbl>     <int>     <dbl>      <int>
## 1 France         Europe     2002    79.6  59925035    28926.  108700891
## 2 France         Europe     2007    80.7  61083916    30470.  108700891
## 3 Mexico         Americas   2002    74.9 102479927    10742.  108700891
## 4 Mexico         Americas   2007    76.2 108700891    11978.  108700891
## 5 Peru           Americas   2002    69.9  26769436     5909.  108700891
## 6 Peru           Americas   2007    71.4  28674757     7409.  108700891
## 7 United Kingdom Europe     2002    78.5  59912431    29479.  108700891
## 8 United Kingdom Europe     2007    79.4  60776238    33203.  108700891

Recategorización dicotómica Cuando queremos recategorizar una variable de manera dicotómica, podemos usar la función if_else(). Sirve para testear una condición, que de ser verdadera asume el primer valor, y en caso contrario el segundo.

Por ejemplo, para traducir el nombre de nuestros continentes.

mutate(gapminder_subset, traduccion = if_else(continent == "Europe", "Europa", "América"))
## # A tibble: 8 x 7
##   country        continent  year lifeExp       pop gdpPercap traduccion
##   <fct>          <fct>     <int>   <dbl>     <int>     <dbl> <chr>     
## 1 France         Europe     2002    79.6  59925035    28926. Europa    
## 2 France         Europe     2007    80.7  61083916    30470. Europa    
## 3 Mexico         Americas   2002    74.9 102479927    10742. América   
## 4 Mexico         Americas   2007    76.2 108700891    11978. América   
## 5 Peru           Americas   2002    69.9  26769436     5909. América   
## 6 Peru           Americas   2007    71.4  28674757     7409. América   
## 7 United Kingdom Europe     2002    78.5  59912431    29479. Europa    
## 8 United Kingdom Europe     2007    79.4  60776238    33203. Europa

Recategorización con sobreescritura Si usamos el mismo nombre que el de una variable existente, nuestra variable será sobreescrita con sus nuevos valores.

mutate(gapminder_subset, lifeExp = if_else(lifeExp >= 75, "70 o más", "Menos que 70"))
## # A tibble: 8 x 6
##   country        continent  year lifeExp            pop gdpPercap
##   <fct>          <fct>     <int> <chr>            <int>     <dbl>
## 1 France         Europe     2002 70 o más      59925035    28926.
## 2 France         Europe     2007 70 o más      61083916    30470.
## 3 Mexico         Americas   2002 Menos que 70 102479927    10742.
## 4 Mexico         Americas   2007 70 o más     108700891    11978.
## 5 Peru           Americas   2002 Menos que 70  26769436     5909.
## 6 Peru           Americas   2007 Menos que 70  28674757     7409.
## 7 United Kingdom Europe     2002 70 o más      59912431    29479.
## 8 United Kingdom Europe     2007 70 o más      60776238    33203.

Recategorización múltiple En ocasiones, será necesario que la recategorización asuma más de dos posibles valores. En estos casos, usamos la función case_when() que permite testear múltiples condiciones. Para abarcar las observaciones que no cumplan ninguna condición, se usa el valor TRUE.

mutate(gapminder_subset, exp_recat = case_when(lifeExp <= 70 ~ "Menor o igual a 70",
                                               lifeExp <= 75 ~ "Entre 71 y 75",
                                               TRUE ~ "Mayor que 75"))
## # A tibble: 8 x 7
##   country        continent  year lifeExp       pop gdpPercap exp_recat         
##   <fct>          <fct>     <int>   <dbl>     <int>     <dbl> <chr>             
## 1 France         Europe     2002    79.6  59925035    28926. Mayor que 75      
## 2 France         Europe     2007    80.7  61083916    30470. Mayor que 75      
## 3 Mexico         Americas   2002    74.9 102479927    10742. Entre 71 y 75     
## 4 Mexico         Americas   2007    76.2 108700891    11978. Mayor que 75      
## 5 Peru           Americas   2002    69.9  26769436     5909. Menor o igual a 70
## 6 Peru           Americas   2007    71.4  28674757     7409. Entre 71 y 75     
## 7 United Kingdom Europe     2002    78.5  59912431    29479. Mayor que 75      
## 8 United Kingdom Europe     2007    79.4  60776238    33203. Mayor que 75

Recategorización con valores “al vuelo”

Es posible testear condiciones en valores que se calculan “al vuelo”. Por ejemplo, recategorizar valores que son mayores que el promedio.

mutate(gapminder_subset, mayor_que_promedio = if_else(lifeExp > mean(lifeExp), “Es mayor”

Sumarise

summarise() Es una función que nos permite obtener datos resumen de nuestras variables. Algo a tener en cuenta es que al hacer nuestro conjunto de datos sólo retendrá los datos de resumen, obviando la data de la cual fueron obtenidos. Debemos identificar dos cosas:

El nombre del conjunto de datos El nombre de la variable resumen objetivo y la operación necesaria para crearla y/o modificarla.

summarise(data, var_objetivo = operacion(var_existente))

Obtener el recuento Por ejemplo, podemos obtener el recuento de observaciones de nuestra tabla si usamos n(). Esta función nos devuelve la cantidad de observaciones en nuestros conjunto de datos. En el mismo código podemos asignarle un nombre a la columna, en este caso le ponemos recuento.

summarise(gapminder_subset, recuento = n())
## # A tibble: 1 x 1
##   recuento
##      <int>
## 1        8

Obtener promedio y mediana Podemos obtener más de una medida en un solo llamado a summarise(). Por ejemplo, podemos obtener el promedio y mediana del PBI per cápita. Además, podemos aprovechar para obtener la diferencia entre ambas medidas dentro del mismo llamado.Esto también es válido en el contexto de mutate().

summarise(gapminder_subset, 
          promedio = mean(gdpPercap), 
          mediana = median(gdpPercap),
          diferencia = promedio - mediana)
## # A tibble: 1 x 3
##   promedio mediana diferencia
##      <dbl>   <dbl>      <dbl>
## 1   19765.  20452.      -687.

Group by

group_by() Existe una gran cantidad de datos de resumen que se pueden obtener en nuestro análisis, pero no siempre vamos a querer que los datos sean generales. La función group_by() nos permite seleccionar variables para agruparlas y obtener datos de resumen diferenciados. Debemos identificar dos cosas:

El nombre del conjunto de datos Las variables de agrupación Aunque es posible utilizarla en conjunto con otras funciones de dplyr(), usarla junto con summarise() nos demuestra claramente su poder.

Recuento agrupado por país Podemos obtener el recuento de observaciones por país si primero agrupamos nuestros datos. Nótese que uso el mismo nombre de gapminder_subset para evitar crear un nuevo objeto en el Environment.

gapminder_subset <- group_by(gapminder_subset, country)
gapminder_subset
## # A tibble: 8 x 6
## # Groups:   country [4]
##   country        continent  year lifeExp       pop gdpPercap
##   <fct>          <fct>     <int>   <dbl>     <int>     <dbl>
## 1 France         Europe     2002    79.6  59925035    28926.
## 2 France         Europe     2007    80.7  61083916    30470.
## 3 Mexico         Americas   2002    74.9 102479927    10742.
## 4 Mexico         Americas   2007    76.2 108700891    11978.
## 5 Peru           Americas   2002    69.9  26769436     5909.
## 6 Peru           Americas   2007    71.4  28674757     7409.
## 7 United Kingdom Europe     2002    78.5  59912431    29479.
## 8 United Kingdom Europe     2007    79.4  60776238    33203.

En principio, los datos no han sufrido ninguna modificación, pero podemos observar que ahora además de las filas y columnas, obtenemos los grupos formados.Si calculamos el recuento de observaciones, ahora obtenemos un valor para cada uno de nuestros grupos.

summarise(gapminder_subset, recuento = n())
## # A tibble: 4 x 2
##   country        recuento
##   <fct>             <int>
## 1 France                2
## 2 Mexico                2
## 3 Peru                  2
## 4 United Kingdom        2

Debido a que sólo contábamos con una variable de agrupación, summarise() genera un nuevo tibble que ya no está agrupado.

ungroup() Los datos permanecerán agrupados hasta que le indiquemos al df que se debe desagrupar, a través de ungroup(). Debemos especificar:

El nombre del conjunto de datos

gapminder_subset <- ungroup(gapminder_subset)

Esto es particularmente útil si posteriormente queremos encadenar otra operación, como filter() o mutate() en los nuevos valores calculados.

Calcular promedio y mediana por año Con la información de gapminder_subset es posible calcular el promedio y mediana del PBI per cápita por año. Hacemos esto usando group_by() y summarise.

gapminder_subset <- group_by(gapminder_subset, year)
summarise(gapminder_subset, promedio = mean(gdpPercap), mediana = median(gdpPercap))
## # A tibble: 2 x 3
##    year promedio mediana
##   <int>    <dbl>   <dbl>
## 1  2002   18764.  19834.
## 2  2007   20765.  21224.
gapminder_subset <- ungroup(gapminder_subset)

Ejercicio 1

1.¿Cuál fue el promedio mundial de la expectativa de vida en 1952?

gapminder_subset2<- filter(gapminder, year == 1952)
summarise(gapminder_subset2, promedio_exp_vida = mean(lifeExp))
## # A tibble: 1 x 1
##   promedio_exp_vida
##               <dbl>
## 1              49.1

Ejercicio 2

Usando gapminder, responder la siguiente pregunta:

¿Cuál fue el promedio del PBI total de los países de Europa en 1987?

gapminder_subset3<- filter(gapminder, year == 1987, continent == "Europe")
gapminder_subset4<- mutate(gapminder_subset3, pbi_total = pop * gdpPercap)
summarise(gapminder_subset4, promedio_pbi_total = mean(pbi_total))
## # A tibble: 1 x 1
##   promedio_pbi_total
##                <dbl>
## 1      316507473546.

Ejercicio 3 Usando gapminder, responder la siguiente pregunta:

¿Cuál fue el continente con mayor promedio suma de PBI total en 1992?

anio <- filter(gapminder, year == 1992)
group_continent <- group_by(anio, continent)
pbi <- mutate(group_continent, pbi_total = pop * gdpPercap)
pbi_continent <- summarise(pbi, suma_pbi_total = sum(pbi_total))
arrange(pbi_continent, desc(suma_pbi_total))
## # A tibble: 5 x 2
##   continent suma_pbi_total
##   <fct>              <dbl>
## 1 Americas         1.22e13
## 2 Europe           1.03e13
## 3 Asia             1.01e13
## 4 Africa           1.37e12
## 5 Oceania          4.73e11

Ejercicio 4 - opcional Usando gapminder, recrea el siguiente gráfico. Año, promedio de exp de vida por año para cada continente.

Operador pipe

Primer argumento de las funciones Es importante notar una característica común entre todas las funciones de dplyr() que hemos conocido: el primer argumento siempre es el conjunto de datos al que se le va a aplicar la transformación. Esta es una característica consistente con todos los paquetes del tidyverse, que permite tener un flujo de trabajo pipeable.

filter(gapminder, country == "Peru")
## # A tibble: 12 x 6
##    country continent  year lifeExp      pop gdpPercap
##    <fct>   <fct>     <int>   <dbl>    <int>     <dbl>
##  1 Peru    Americas   1952    43.9  8025700     3759.
##  2 Peru    Americas   1957    46.3  9146100     4245.
##  3 Peru    Americas   1962    49.1 10516500     4957.
##  4 Peru    Americas   1967    51.4 12132200     5788.
##  5 Peru    Americas   1972    55.4 13954700     5938.
##  6 Peru    Americas   1977    58.4 15990099     6281.
##  7 Peru    Americas   1982    61.4 18125129     6435.
##  8 Peru    Americas   1987    64.1 20195924     6361.
##  9 Peru    Americas   1992    66.5 22430449     4446.
## 10 Peru    Americas   1997    68.4 24748122     5838.
## 11 Peru    Americas   2002    69.9 26769436     5909.
## 12 Peru    Americas   2007    71.4 28674757     7409.
select(gapminder, continent, year, pop)
## # A tibble: 1,704 x 3
##    continent  year      pop
##    <fct>     <int>    <int>
##  1 Asia       1952  8425333
##  2 Asia       1957  9240934
##  3 Asia       1962 10267083
##  4 Asia       1967 11537966
##  5 Asia       1972 13079460
##  6 Asia       1977 14880372
##  7 Asia       1982 12881816
##  8 Asia       1987 13867957
##  9 Asia       1992 16317921
## 10 Asia       1997 22227415
## # … with 1,694 more rows
arrange(gapminder, desc(gdpPercap))
## # A tibble: 1,704 x 6
##    country   continent  year lifeExp     pop gdpPercap
##    <fct>     <fct>     <int>   <dbl>   <int>     <dbl>
##  1 Kuwait    Asia       1957    58.0  212846   113523.
##  2 Kuwait    Asia       1972    67.7  841934   109348.
##  3 Kuwait    Asia       1952    55.6  160000   108382.
##  4 Kuwait    Asia       1962    60.5  358266    95458.
##  5 Kuwait    Asia       1967    64.6  575003    80895.
##  6 Kuwait    Asia       1977    69.3 1140357    59265.
##  7 Norway    Europe     2007    80.2 4627926    49357.
##  8 Kuwait    Asia       2007    77.6 2505559    47307.
##  9 Singapore Asia       2007    80.0 4553009    47143.
## 10 Norway    Europe     2002    79.0 4535591    44684.
## # … with 1,694 more rows
mutate(gapminder, pbi_total = pop * gdpPercap)
## # A tibble: 1,704 x 7
##    country     continent  year lifeExp      pop gdpPercap    pbi_total
##    <fct>       <fct>     <int>   <dbl>    <int>     <dbl>        <dbl>
##  1 Afghanistan Asia       1952    28.8  8425333      779.  6567086330.
##  2 Afghanistan Asia       1957    30.3  9240934      821.  7585448670.
##  3 Afghanistan Asia       1962    32.0 10267083      853.  8758855797.
##  4 Afghanistan Asia       1967    34.0 11537966      836.  9648014150.
##  5 Afghanistan Asia       1972    36.1 13079460      740.  9678553274.
##  6 Afghanistan Asia       1977    38.4 14880372      786. 11697659231.
##  7 Afghanistan Asia       1982    39.9 12881816      978. 12598563401.
##  8 Afghanistan Asia       1987    40.8 13867957      852. 11820990309.
##  9 Afghanistan Asia       1992    41.7 16317921      649. 10595901589.
## 10 Afghanistan Asia       1997    41.8 22227415      635. 14121995875.
## # … with 1,694 more rows
summarise(gapminder, promedio_pbi_pc = mean(gdpPercap))
## # A tibble: 1 x 1
##   promedio_pbi_pc
##             <dbl>
## 1           7215.
group_by(gapminder, continent)
## # A tibble: 1,704 x 6
## # Groups:   continent [5]
##    country     continent  year lifeExp      pop gdpPercap
##    <fct>       <fct>     <int>   <dbl>    <int>     <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
ungroup(gapminder)
## # A tibble: 1,704 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <fct>       <fct>     <int>   <dbl>    <int>     <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

Lo que esto quiere decir concretamente es que las funciones se pueden encadenar a través de un operador llamado pipe (%>%), cuyo valor en el lado izquierdo se convierte en el primer argumento de la función del lado derecho.

filter(gapminder_subset, country == "Peru")
## # A tibble: 2 x 6
##   country continent  year lifeExp      pop gdpPercap
##   <fct>   <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Peru    Americas   2002    69.9 26769436     5909.
## 2 Peru    Americas   2007    71.4 28674757     7409.
gapminder_subset %>% filter(country == "Peru")
## # A tibble: 2 x 6
##   country continent  year lifeExp      pop gdpPercap
##   <fct>   <fct>     <int>   <dbl>    <int>     <dbl>
## 1 Peru    Americas   2002    69.9 26769436     5909.
## 2 Peru    Americas   2007    71.4 28674757     7409.

Flujo de análisis En gapminder tengo todo lo necesario para obtener el ranking del promedio del PBI nacional para cada uno de los cinco continentes en los años 1987 y 2007 (esto me permitirá comparar los cambios en la economía mundial en esos veinte años).

Para ello voy a requerir usar todas las funciones de dplyr que he aprendido hasta el momento. Primero lo haremos paso por paso y luego convertiremos todo en el flujo de unos cuantos pipes.

Debido a que sólo necesito los años 1987 y 2007, filtro mis datos. Al objeto modificado lo llamaré gapminder_modificado.

gapminder_modificado <- filter(gapminder, year %in% c(1987, 2007))
gapminder_modificado
## # A tibble: 284 x 6
##    country     continent  year lifeExp      pop gdpPercap
##    <fct>       <fct>     <int>   <dbl>    <int>     <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

El siguiente paso es quedarme sólo con las variables que necesito. En este caso son continente, año, PBI per cápita y población.

gapminder_modificado <- select(gapminder_modificado, continent, year, gdpPercap, pop)
gapminder_modificado
## # A tibble: 284 x 4
##    continent  year gdpPercap      pop
##    <fct>     <int>     <dbl>    <int>
##  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

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

gapminder_modificado <- mutate(gapminder_modificado,
                               PBI_nacional = pop * gdpPercap)
gapminder_modificado
## # A tibble: 284 x 5
##    continent  year gdpPercap      pop  PBI_nacional
##    <fct>     <int>     <dbl>    <int>         <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.

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)
gapminder_modificado
## # A tibble: 10 x 3
##    continent  year      promedio
##    <fct>     <int>         <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))
gapminder_modificado
## # A tibble: 10 x 3
##    continent  year      promedio
##    <fct>     <int>         <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.

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

Podría juntar todos estos pasos en un solo bloque para que quede claro lo que sucedió.

gapminder_modificado <- filter(gapminder, year %in% c(1987, 2007)) 
gapminder_modificado <- select(gapminder_modificado, continent, year, gdpPercap, pop)
gapminder_modificado <- mutate(gapminder_modificado, PBI_nacional = pop * gdpPercap)
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)
gapminder_modificado <- arrange(gapminder_modificado, year, desc(promedio))

Reescribiendo el flujo con pipes Podemos hacer todo el análisis usando pipes.

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
##    <fct>     <int>         <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.

Hemos obtenido el mismo resultado escribiendo mucho menos código y sin crear ningún objeto intermedio. Además, podemos seguir el proceso de análisis como si fuera una secuencia de pasos. Piensa el pipe como un luego en la secuencia.

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
##    <fct>     <int>         <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.

Indicaciones: Tomo gapminder Filtro las observaciones de los años 1987 y 2007 Selecciono las variables relevantes Calculo el PBI nacional Agrupo por continente y año Obtengo el promedio del PBI nacional Desagrupo el conjunto de datos Organizo por año y promedio descendente.

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.

Guíate de esta secuencia:

Usar gapminder Filtrar los datos de los cuatro países y los años seleccionados Seleccionar las variables país, población y pbi per cápita Calcular el pbi total para cada observación Agrupar las observaciones por año Organizar por valor de pbi total en orden descendente Desagrupar las observaciones

gapminder %>% 
  filter(year %in% c(1967, 1987,2007)) %>%
  filter(country %in% c("Peru", "Mexico", "Colombia", "Chile"))  %>%
  select(country,year, gdpPercap, pop) %>% 
  mutate(PBI_nacional = pop * gdpPercap) %>% 
  group_by(country, year) %>% 
  summarise(promedio = mean(PBI_nacional)) %>% 
  ungroup() %>% 
  arrange(country, desc(promedio))
## `summarise()` has grouped output by 'country'. You can override using the `.groups` argument.
## # A tibble: 12 x 3
##    country   year promedio
##    <fct>    <int>    <dbl>
##  1 Chile     2007  2.14e11
##  2 Chile     1987  6.91e10
##  3 Chile     1967  4.52e10
##  4 Colombia  2007  3.10e11
##  5 Colombia  1987  1.52e11
##  6 Colombia  1967  5.29e10
##  7 Mexico    2007  1.30e12
##  8 Mexico    1987  6.96e11
##  9 Mexico    1967  2.76e11
## 10 Peru      2007  2.12e11
## 11 Peru      1987  1.28e11
## 12 Peru      1967  7.02e10

Ejercicio 2 Realiza un análisis que permita responder a la pregunta:

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