# Cálculo de la masa promedio para cada especie de pingüinos
# que habita en la isla Biscoe
penguins |>
  filter(island == "Biscoe") |> 
  group_by(species) |> 
  summarize(
    body_mass_g_mean = mean(body_mass_g, na.rm = TRUE)
  )8 dplyr - gramática para manipulación de datos
Trabajo previo
Lecturas
Wickham, H., Çetinkaya-Rundel, M., & Grolemund, G. (s. f.). R for Data Science (2nd ed.) Chapter 4 - Data transformation. Recuperado 5 de mayo de 2024, de https://r4ds.hadley.nz/data-transform.html
Introducción
El paquete dplyr de Tidyverse es descrito como una gramática para la manipulación de datos, la cual proporciona un conjunto consistente de “verbos” que ayuda a solucionar los retos de procesamiento de datos más comunes. Los principales verbos (i.e. funciones) de esta gramática son:
select(): selecciona columnas con base en sus nombres.
filter(): selecciona filas con base en sus valores.
arrange(): cambia el orden de las filas.
mutate(): crea nuevas columnas, las cuales se expresan como funciones de columnas existentes.
summarize(): agrupa y resume valores.
Todas estas operaciones pueden combinarse con la función group_by(), la cual ejecuta cualquiera de las operaciones anteriores “en grupo”. Además, dplyr proporciona funciones adicionales para tareas más específicas.
Las funciones de dplyr pueden encadenarse a través del operador pipe (tubo), ya sea el del paquete magrittr (%>%) o el del paquete base de R (|>). En el material de este curso, se prefiere la segunda opción. Los pipes se utilizan para comunicar procesos y así formar pipelines (tuberías).
Todas las funciones de dplyr trabajan de manera similar:
- El primer argumento siempre es un data frame. Puede omitirse si la función recibe el data frame a través del operador pipe.
- Los argumentos siguientes describen que hacer con el data frame, utilizando los nombres de las columnas (sin comillas).
 
- El resultado siempre es un nuevo data frame.
Ya que cada función de dplyr se especializa en una sola tarea, usualmente es necesario encadenar funciones mediante pipes para lograr un objetivo de procesamiento de datos. Por ejemplo, el siguiente bloque de código usa tres verbos, o funciones, de dplyr para obtener la masa promedio de cada especie de pingüinos que habita en la isla Biscoe.
A tibble: 2 × 2
species body_mass_g_mean
<fct>              <dbl>
Adelie          3710.659
Gentoo          5076.0168.1 Instalación y carga
El paquete dplyr puede instalarse junto con todos los demás paquete de Tidyverse o de manera individual:
# Instalación conjunta de Tidyverse
install.packages("tidyverse")
# Instalación individual
install.packages("dplyr")Una vez instalado, dplyr puede cargarse con la función library():
# Carga conjunta de Tidyverse
library(tidyverse)
# Carga individual
library(dplyr)Seguidamente, se cargan algunos paquetes adicionales que se utilizan en este capítulo.
# Carga de readr, paquete para lectura de datos
library(readr)
# Carga de tidyr, paquete para creación de datos "tidy"
library(tidyr)
# Carga de knitr, paquete para integrar salidas en R en documentos dinámicos
# (ej. Quarto). En este capítulo se usa para generar tablas.
library(knitr)8.2 Conjuntos de datos para ejemplos
En los ejemplos de este capítulo, se utilizan dos conjunto de datos:
- Pingüinos del archipiélago Palmer de palmerpenguins.
- Países (Admin 0 – Details) de Natural Earth.
- Esperanza de vida al nacer) de Banco Mundial - Indicadores.
8.2.1 Pingüinos del archipiélago Palmer
Para cargar el conjunto de datos penguins, basta con cargar el paquete palmerpenguins.
# Carga del paquete de datos palmerpenguins
library(palmerpenguins)La función glimpse() despliega la estructura de un conjunto de datos, incluyendo los nombres de las columnas, sus tipos de datos y una muestra de estos:
# Estructura del conjunto de datos penguins
glimpse(penguins)Rows: 344
Columns: 8
$ species           <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adel…
$ island            <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgerse…
$ bill_length_mm    <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, …
$ bill_depth_mm     <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, …
$ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186…
$ body_mass_g       <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, …
$ sex               <fct> male, female, female, NA, female, male, female, male…
$ year              <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007…La función también puede llamarse mediante un pipe:
# Estructura del conjunto de datos penguins
penguins |>
  glimpse()Rows: 344
Columns: 8
$ species           <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adel…
$ island            <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgerse…
$ bill_length_mm    <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, …
$ bill_depth_mm     <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, …
$ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186…
$ body_mass_g       <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, …
$ sex               <fct> male, female, female, NA, female, male, female, male…
$ year              <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007…Un conjunto de datos puede visualizarse al escribir su nombre en la consola de R o en un programa:
# Despliegue de los datos de penguins
penguins# A tibble: 344 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
 1 Adelie  Torgersen           39.1          18.7               181        3750
 2 Adelie  Torgersen           39.5          17.4               186        3800
 3 Adelie  Torgersen           40.3          18                 195        3250
 4 Adelie  Torgersen           NA            NA                  NA          NA
 5 Adelie  Torgersen           36.7          19.3               193        3450
 6 Adelie  Torgersen           39.3          20.6               190        3650
 7 Adelie  Torgersen           38.9          17.8               181        3625
 8 Adelie  Torgersen           39.2          19.6               195        4675
 9 Adelie  Torgersen           34.1          18.1               193        3475
10 Adelie  Torgersen           42            20.2               190        4250
# ℹ 334 more rows
# ℹ 2 more variables: sex <fct>, year <int>penguins es un tibble, un tipo especial de data frame que se utiliza en Tidyverse. La diferencia más importante entre un tibble y un data frame es la manera en la que se imprimen: los tibbles están diseñados para conjuntos de datos grandes, por lo que solo muestran los primeros registros y las columnas que caben en la pantalla. Un data frame regular muestra todas sus columnas y muchos más registros, lo que dificulta su visualización. Note la diferencia, por ejemplo, con la forma en la que se despliega el conjunto de datos iris (observe también la diferencia entre las salidas de class(iris) y class(penguins)). A pesar de estas diferencias en el despliegue, en general, un data frame regular y un tibble pueden tratarse indistintamente.
Para generar una salida más estilizada, puede usarse la función knitr::kable(), la cual genera tablas para documentos web. En el siguiente ejemplo, se obtienen los primeros registros de penguins con la función head() y se despliegan en una tabla mediante kable().
# Despliegue de los primeros registros de penguins en una tabla kable
penguins |>
  head(n = 10) |>
  kable(format = "html")| species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | sex | year | 
|---|---|---|---|---|---|---|---|
| Adelie | Torgersen | 39.1 | 18.7 | 181 | 3750 | male | 2007 | 
| Adelie | Torgersen | 39.5 | 17.4 | 186 | 3800 | female | 2007 | 
| Adelie | Torgersen | 40.3 | 18.0 | 195 | 3250 | female | 2007 | 
| Adelie | Torgersen | NA | NA | NA | NA | NA | 2007 | 
| Adelie | Torgersen | 36.7 | 19.3 | 193 | 3450 | female | 2007 | 
| Adelie | Torgersen | 39.3 | 20.6 | 190 | 3650 | male | 2007 | 
| Adelie | Torgersen | 38.9 | 17.8 | 181 | 3625 | female | 2007 | 
| Adelie | Torgersen | 39.2 | 19.6 | 195 | 4675 | male | 2007 | 
| Adelie | Torgersen | 34.1 | 18.1 | 193 | 3475 | NA | 2007 | 
| Adelie | Torgersen | 42.0 | 20.2 | 190 | 4250 | NA | 2007 | 
8.2.2 Países
Se utiliza la función readr::read_csv() para leer un archivo CSV almacenado en el repositorio GitHub de este curso, con los datos de las estadísticas policiales proporcionados por el OIJ en formato Excel. readr::read_csv() es más eficiente que read.csv() (del paquete base de R) y tiene otras ventajas como detección automática de tipos de datos y mejor integración con otros paquetes de Tidyverse (ej. dplyr, tidyr, ggplot2).
# Carga de los datos de países
paises <-
  read_csv(
    "https://raw.githubusercontent.com/pf0953-programacionr/2024-ii/refs/heads/main/datos/natural-earth/paises.csv"
  )Estructura del conjunto de datos:
# Estructura de los datos de países
glimpse(paises)Rows: 201
Columns: 10
$ ADM0_ISO   <chr> "IDN", "MYS", "CHL", "BOL", "PER", "ARG", "GBR", "CYP", "IN…
$ NAME       <chr> "Indonesia", "Malaysia", "Chile", "Bolivia", "Peru", "Argen…
$ CONTINENT  <chr> "Asia", "Asia", "South America", "South America", "South Am…
$ REGION_UN  <chr> "Asia", "Asia", "Americas", "Americas", "Americas", "Americ…
$ SUBREGION  <chr> "South-Eastern Asia", "South-Eastern Asia", "South America"…
$ REGION_WB  <chr> "East Asia & Pacific", "East Asia & Pacific", "Latin Americ…
$ ECONOMY    <chr> "4. Emerging region: MIKT", "6. Developing region", "5. Eme…
$ INCOME_GRP <chr> "4. Lower middle income", "3. Upper middle income", "3. Upp…
$ POP_EST    <dbl> 270625568, 31949777, 18952038, 11513100, 32510453, 44938712…
$ GDP_MD     <dbl> 1119190, 364681, 282318, 40895, 226848, 445445, 2863166, 24…Despliegue de los datos (debido a que paises es un data frame, pero no un tibble, se limitan manualmente las filas y columnas que se muestran):
# Despliegue de los primeros registros de paises en una tabla kable
paises |>
  head(n = 10) |>
  kable(format = "html")| ADM0_ISO | NAME | CONTINENT | REGION_UN | SUBREGION | REGION_WB | ECONOMY | INCOME_GRP | POP_EST | GDP_MD | 
|---|---|---|---|---|---|---|---|---|---|
| IDN | Indonesia | Asia | Asia | South-Eastern Asia | East Asia & Pacific | 4. Emerging region: MIKT | 4. Lower middle income | 270625568 | 1119190 | 
| MYS | Malaysia | Asia | Asia | South-Eastern Asia | East Asia & Pacific | 6. Developing region | 3. Upper middle income | 31949777 | 364681 | 
| CHL | Chile | South America | Americas | South America | Latin America & Caribbean | 5. Emerging region: G20 | 3. Upper middle income | 18952038 | 282318 | 
| BOL | Bolivia | South America | Americas | South America | Latin America & Caribbean | 5. Emerging region: G20 | 4. Lower middle income | 11513100 | 40895 | 
| PER | Peru | South America | Americas | South America | Latin America & Caribbean | 5. Emerging region: G20 | 3. Upper middle income | 32510453 | 226848 | 
| ARG | Argentina | South America | Americas | South America | Latin America & Caribbean | 5. Emerging region: G20 | 3. Upper middle income | 44938712 | 445445 | 
| GBR | United Kingdom | Europe | Europe | Northern Europe | Europe & Central Asia | 1. Developed region: G7 | 1. High income: OECD | 67366465 | 2863166 | 
| CYP | Cyprus | Asia | Asia | Western Asia | Europe & Central Asia | 6. Developing region | 2. High income: nonOECD | 1198575 | 24948 | 
| IND | India | Asia | Asia | Southern Asia | South Asia | 3. Emerging region: BRIC | 4. Lower middle income | 1366417754 | 2868929 | 
| CHN | China | Asia | Asia | Eastern Asia | East Asia & Pacific | 3. Emerging region: BRIC | 3. Upper middle income | 1405862845 | 14762473 | 
8.2.3 Esperanza de vida al nacer
# Carga de los datos de esperanza de vida en países
esperanza_vida <-
  read_csv(
    "https://raw.githubusercontent.com/pf0953-programacionr/2024-ii/refs/heads/main/datos/world-bank/paises-esperanza-vida.csv"
  )Estructura del conjunto de datos:
# Estructura de los datos de esperanza de vida
glimpse(esperanza_vida)Rows: 266
Columns: 69
$ `Country Name`   <chr> "Aruba", "Africa Eastern and Southern", "Afghanistan"…
$ `Country Code`   <chr> "ABW", "AFE", "AFG", "AFW", "AGO", "ALB", "AND", "ARB…
$ `Indicator Name` <chr> "Life expectancy at birth, total (years)", "Life expe…
$ `Indicator Code` <chr> "SP.DYN.LE00.IN", "SP.DYN.LE00.IN", "SP.DYN.LE00.IN",…
$ `1960`           <dbl> 64.15200, 44.08555, 32.53500, 37.84515, 38.21100, 54.…
$ `1961`           <dbl> 64.53700, 44.38670, 33.06800, 38.16495, 37.26700, 55.…
$ `1962`           <dbl> 64.75200, 44.75218, 33.54700, 38.73510, 37.53900, 56.…
$ `1963`           <dbl> 65.13200, 44.91316, 34.01600, 39.06372, 37.82400, 57.…
$ `1964`           <dbl> 65.29400, 45.47904, 34.49400, 39.33536, 38.13100, 58.…
$ `1965`           <dbl> 65.50200, 45.49834, 34.95300, 39.61804, 38.49500, 60.…
$ `1966`           <dbl> 66.06300, 45.24910, 35.45300, 39.83783, 38.75700, 60.…
$ `1967`           <dbl> 66.43900, 45.92491, 35.92400, 39.47150, 39.09200, 61.…
$ `1968`           <dbl> 66.75700, 46.22310, 36.41800, 40.08568, 39.48400, 62.…
$ `1969`           <dbl> 67.16800, 46.43230, 36.91000, 40.35042, 39.82900, 63.…
$ `1970`           <dbl> 67.58300, 46.71848, 37.41800, 41.03476, 40.19000, 64.…
$ `1971`           <dbl> 67.97500, 47.19294, 37.92300, 41.55672, 40.55400, 65.…
$ `1972`           <dbl> 68.57700, 46.89739, 38.44400, 42.24979, 40.90500, 66.…
$ `1973`           <dbl> 69.09200, 47.69232, 39.00300, 42.85505, 41.27000, 67.…
$ `1974`           <dbl> 69.50300, 47.59806, 39.55000, 43.49768, 41.65200, 67.…
$ `1975`           <dbl> 69.76200, 47.75989, 40.10000, 44.20125, 41.19100, 68.…
$ `1976`           <dbl> 70.03500, 48.34959, 40.64500, 45.00316, 41.16300, 68.…
$ `1977`           <dbl> 70.26400, 48.63591, 41.22800, 45.71989, 41.43700, 69.…
$ `1978`           <dbl> 70.49400, 48.76360, 40.27100, 46.26954, 41.83000, 69.…
$ `1979`           <dbl> 70.77800, 49.26134, 39.08600, 46.67374, 42.17500, 69.…
$ `1980`           <dbl> 71.06600, 49.63654, 39.61800, 47.01524, 42.44900, 70.…
$ `1981`           <dbl> 71.72200, 50.05707, 40.16400, 47.29719, 42.77200, 70.…
$ `1982`           <dbl> 71.95900, 50.29685, 37.76600, 47.52938, 43.05100, 71.…
$ `1983`           <dbl> 72.10500, 48.70333, 38.18700, 47.78526, 42.09200, 71.…
$ `1984`           <dbl> 72.25100, 48.65266, 33.32900, 47.93192, 42.35300, 71.…
$ `1985`           <dbl> 72.38800, 49.01163, 33.55000, 48.02168, 42.64800, 71.…
$ `1986`           <dbl> 72.46200, 49.63972, 39.39600, 48.06676, 42.84300, 71.…
$ `1987`           <dbl> 72.78900, 50.07589, 39.84400, 48.23785, 40.91700, 72.…
$ `1988`           <dbl> 73.04700, 49.35973, 43.95800, 48.51291, 41.54500, 72.…
$ `1989`           <dbl> 73.02300, 50.68410, 45.15800, 48.68985, 41.76500, 72.…
$ `1990`           <dbl> 73.07600, 50.60773, 45.96700, 48.65000, 41.89300, 73.…
$ `1991`           <dbl> 73.10000, 50.39046, 46.66300, 48.66246, 43.81300, 73.…
$ `1992`           <dbl> 73.17900, 49.96211, 47.59600, 48.73727, 42.20900, 73.…
$ `1993`           <dbl> 73.22500, 50.27363, 51.46600, 48.83204, 42.10100, 73.…
$ `1994`           <dbl> 73.27200, 50.88258, 51.49500, 48.68189, 43.42200, 74.…
$ `1995`           <dbl> 73.34900, 51.00193, 52.54400, 48.78377, 45.84900, 74.…
$ `1996`           <dbl> 73.44800, 50.81069, 53.24300, 48.90628, 46.03300, 74.…
$ `1997`           <dbl> 73.45200, 50.97423, 53.63400, 49.07918, 46.30600, 73.…
$ `1998`           <dbl> 73.49100, 50.32591, 52.94300, 49.33295, 45.05700, 74.…
$ `1999`           <dbl> 73.56100, 51.23785, 54.84600, 49.75012, 45.38600, 75.…
$ `2000`           <dbl> 73.56900, 51.96448, 55.29800, 50.22195, 46.02400, 75.…
$ `2001`           <dbl> 73.64700, 52.18965, 55.79800, 50.56514, 46.59000, 75.…
$ `2002`           <dbl> 73.72600, 52.54079, 56.45400, 50.92785, 47.38600, 75.…
$ `2003`           <dbl> 73.75200, 53.02203, 57.34400, 51.40336, 49.61700, 76.…
$ `2004`           <dbl> 73.57600, 53.54546, 57.94400, 51.81913, 50.59200, 76.…
$ `2005`           <dbl> 73.81100, 54.21965, 58.36100, 52.34455, 51.57000, 76.…
$ `2006`           <dbl> 74.02600, 55.15055, 58.68400, 52.83213, 52.36900, 76.…
$ `2007`           <dbl> 74.21000, 55.93380, 59.11100, 53.25171, 53.64200, 77.…
$ `2008`           <dbl> 74.14700, 56.68042, 59.85200, 53.64116, 54.63300, 77.…
$ `2009`           <dbl> 74.56000, 57.62085, 60.36400, 54.15942, 55.75200, 77.…
$ `2010`           <dbl> 75.40400, 58.41115, 60.85100, 54.55017, 56.72600, 77.…
$ `2011`           <dbl> 75.46500, 59.29327, 61.41900, 55.01314, 57.59600, 78.…
$ `2012`           <dbl> 75.53100, 60.05078, 61.92300, 55.34056, 58.62300, 78.…
$ `2013`           <dbl> 75.63600, 60.70987, 62.41700, 55.67341, 59.30700, 78.…
$ `2014`           <dbl> 75.60100, 61.33792, 62.54500, 55.92223, 60.04000, 78.…
$ `2015`           <dbl> 75.68300, 61.85646, 62.65900, 56.19587, 60.65500, 78.…
$ `2016`           <dbl> 75.61700, 62.44405, 63.13600, 56.58168, 61.09200, 78.…
$ `2017`           <dbl> 75.90300, 62.92239, 63.01600, 56.88845, 61.68000, 79.…
$ `2018`           <dbl> 76.07200, 63.36586, 63.08100, 57.18914, 62.14400, 79.…
$ `2019`           <dbl> 76.24800, 63.75568, 63.56500, 57.55580, 62.44800, 79.…
$ `2020`           <dbl> 75.72300, 63.31386, 62.57500, 57.22637, 62.26100, 76.…
$ `2021`           <dbl> 74.62600, 62.45459, 61.98200, 56.98866, 61.64300, 76.…
$ `2022`           <dbl> 74.99200, 62.89903, 62.87900, 57.62618, 61.92900, 76.…
$ `2023`           <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ ...69            <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…Despliegue de los datos:
# Despliegue de los primeros registros de esperanza de vida en una tabla kable
esperanza_vida |>
  head(n = 10) |>
  kable(format = "html")| Country Name | Country Code | Indicator Name | Indicator Code | 1960 | 1961 | 1962 | 1963 | 1964 | 1965 | 1966 | 1967 | 1968 | 1969 | 1970 | 1971 | 1972 | 1973 | 1974 | 1975 | 1976 | 1977 | 1978 | 1979 | 1980 | 1981 | 1982 | 1983 | 1984 | 1985 | 1986 | 1987 | 1988 | 1989 | 1990 | 1991 | 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | ...69 | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Aruba | ABW | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 64.15200 | 64.53700 | 64.75200 | 65.13200 | 65.29400 | 65.50200 | 66.06300 | 66.43900 | 66.75700 | 67.16800 | 67.58300 | 67.97500 | 68.57700 | 69.09200 | 69.50300 | 69.76200 | 70.03500 | 70.26400 | 70.49400 | 70.77800 | 71.06600 | 71.72200 | 71.95900 | 72.10500 | 72.25100 | 72.38800 | 72.46200 | 72.78900 | 73.04700 | 73.02300 | 73.07600 | 73.10000 | 73.17900 | 73.22500 | 73.27200 | 73.34900 | 73.44800 | 73.45200 | 73.49100 | 73.56100 | 73.56900 | 73.64700 | 73.72600 | 73.75200 | 73.57600 | 73.81100 | 74.02600 | 74.21000 | 74.14700 | 74.56000 | 75.40400 | 75.46500 | 75.53100 | 75.63600 | 75.60100 | 75.68300 | 75.61700 | 75.90300 | 76.07200 | 76.24800 | 75.72300 | 74.62600 | 74.99200 | NA | NA | 
| Africa Eastern and Southern | AFE | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 44.08555 | 44.38670 | 44.75218 | 44.91316 | 45.47904 | 45.49834 | 45.24910 | 45.92491 | 46.22310 | 46.43230 | 46.71848 | 47.19294 | 46.89739 | 47.69232 | 47.59806 | 47.75989 | 48.34959 | 48.63591 | 48.76360 | 49.26134 | 49.63654 | 50.05707 | 50.29685 | 48.70333 | 48.65266 | 49.01163 | 49.63972 | 50.07589 | 49.35973 | 50.68410 | 50.60773 | 50.39046 | 49.96211 | 50.27363 | 50.88258 | 51.00193 | 50.81069 | 50.97423 | 50.32591 | 51.23785 | 51.96448 | 52.18965 | 52.54079 | 53.02203 | 53.54546 | 54.21965 | 55.15055 | 55.93380 | 56.68042 | 57.62085 | 58.41115 | 59.29327 | 60.05078 | 60.70987 | 61.33792 | 61.85646 | 62.44405 | 62.92239 | 63.36586 | 63.75568 | 63.31386 | 62.45459 | 62.89903 | NA | NA | 
| Afghanistan | AFG | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 32.53500 | 33.06800 | 33.54700 | 34.01600 | 34.49400 | 34.95300 | 35.45300 | 35.92400 | 36.41800 | 36.91000 | 37.41800 | 37.92300 | 38.44400 | 39.00300 | 39.55000 | 40.10000 | 40.64500 | 41.22800 | 40.27100 | 39.08600 | 39.61800 | 40.16400 | 37.76600 | 38.18700 | 33.32900 | 33.55000 | 39.39600 | 39.84400 | 43.95800 | 45.15800 | 45.96700 | 46.66300 | 47.59600 | 51.46600 | 51.49500 | 52.54400 | 53.24300 | 53.63400 | 52.94300 | 54.84600 | 55.29800 | 55.79800 | 56.45400 | 57.34400 | 57.94400 | 58.36100 | 58.68400 | 59.11100 | 59.85200 | 60.36400 | 60.85100 | 61.41900 | 61.92300 | 62.41700 | 62.54500 | 62.65900 | 63.13600 | 63.01600 | 63.08100 | 63.56500 | 62.57500 | 61.98200 | 62.87900 | NA | NA | 
| Africa Western and Central | AFW | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 37.84515 | 38.16495 | 38.73510 | 39.06372 | 39.33536 | 39.61804 | 39.83783 | 39.47150 | 40.08568 | 40.35042 | 41.03476 | 41.55672 | 42.24979 | 42.85505 | 43.49768 | 44.20125 | 45.00316 | 45.71989 | 46.26954 | 46.67374 | 47.01524 | 47.29719 | 47.52938 | 47.78526 | 47.93192 | 48.02168 | 48.06676 | 48.23785 | 48.51291 | 48.68985 | 48.65000 | 48.66246 | 48.73727 | 48.83204 | 48.68189 | 48.78377 | 48.90628 | 49.07918 | 49.33295 | 49.75012 | 50.22195 | 50.56514 | 50.92785 | 51.40336 | 51.81913 | 52.34455 | 52.83213 | 53.25171 | 53.64116 | 54.15942 | 54.55017 | 55.01314 | 55.34056 | 55.67341 | 55.92223 | 56.19587 | 56.58168 | 56.88845 | 57.18914 | 57.55580 | 57.22637 | 56.98866 | 57.62618 | NA | NA | 
| Angola | AGO | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 38.21100 | 37.26700 | 37.53900 | 37.82400 | 38.13100 | 38.49500 | 38.75700 | 39.09200 | 39.48400 | 39.82900 | 40.19000 | 40.55400 | 40.90500 | 41.27000 | 41.65200 | 41.19100 | 41.16300 | 41.43700 | 41.83000 | 42.17500 | 42.44900 | 42.77200 | 43.05100 | 42.09200 | 42.35300 | 42.64800 | 42.84300 | 40.91700 | 41.54500 | 41.76500 | 41.89300 | 43.81300 | 42.20900 | 42.10100 | 43.42200 | 45.84900 | 46.03300 | 46.30600 | 45.05700 | 45.38600 | 46.02400 | 46.59000 | 47.38600 | 49.61700 | 50.59200 | 51.57000 | 52.36900 | 53.64200 | 54.63300 | 55.75200 | 56.72600 | 57.59600 | 58.62300 | 59.30700 | 60.04000 | 60.65500 | 61.09200 | 61.68000 | 62.14400 | 62.44800 | 62.26100 | 61.64300 | 61.92900 | NA | NA | 
| Albania | ALB | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 54.43900 | 55.63400 | 56.67100 | 57.84400 | 58.98300 | 60.01900 | 60.99800 | 61.97200 | 62.94600 | 63.92300 | 64.82400 | 65.61800 | 66.42200 | 67.14000 | 67.76900 | 68.32800 | 68.70400 | 69.12100 | 69.30900 | 69.58400 | 70.47800 | 70.73000 | 71.02300 | 71.29600 | 71.50200 | 71.65600 | 71.95000 | 72.35200 | 72.64100 | 72.88000 | 73.14400 | 73.37800 | 73.71500 | 73.93900 | 74.13100 | 74.36200 | 74.59200 | 73.90400 | 74.99000 | 75.18300 | 75.40400 | 75.63900 | 75.89000 | 76.14200 | 76.37600 | 76.62100 | 76.81600 | 77.54900 | 77.65300 | 77.78100 | 77.93600 | 78.09200 | 78.06400 | 78.12300 | 78.40700 | 78.64400 | 78.86000 | 79.04700 | 79.18400 | 79.28200 | 76.98900 | 76.46300 | 76.83300 | NA | NA | 
| Andorra | AND | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | 
| Arab World | ARB | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 44.97290 | 45.67640 | 46.12258 | 46.97247 | 47.89576 | 48.23211 | 48.45707 | 48.91291 | 49.44512 | 49.82224 | 50.35134 | 51.29642 | 51.86446 | 52.53968 | 53.19444 | 53.70986 | 54.04753 | 55.36147 | 56.11217 | 56.82629 | 57.30237 | 57.69293 | 58.05480 | 58.78737 | 59.47898 | 60.21574 | 61.22126 | 61.16971 | 60.60903 | 62.48114 | 62.92797 | 63.17961 | 63.47441 | 64.45832 | 65.49673 | 65.34978 | 65.71840 | 65.99442 | 65.80771 | 66.87673 | 67.29733 | 67.63168 | 67.93557 | 67.85900 | 67.89591 | 68.16268 | 68.56725 | 68.92868 | 69.28643 | 69.81264 | 70.04125 | 70.26152 | 70.18046 | 70.19651 | 70.49263 | 70.75822 | 70.94306 | 71.42960 | 71.63302 | 71.84463 | 70.92336 | 70.81448 | 71.22727 | NA | NA | 
| United Arab Emirates | ARE | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 48.81100 | 49.69500 | 50.68600 | 51.58400 | 52.84800 | 53.98500 | 55.18500 | 56.33900 | 57.54000 | 58.76000 | 60.02100 | 61.21100 | 62.30400 | 63.35100 | 64.33800 | 65.08000 | 65.82000 | 66.51400 | 67.20900 | 67.84600 | 68.53000 | 69.08500 | 69.66000 | 69.94900 | 70.48500 | 70.74700 | 70.96400 | 71.49100 | 71.60600 | 71.75700 | 71.90000 | 72.24100 | 72.30600 | 72.52100 | 72.59800 | 72.69500 | 72.76700 | 72.93700 | 73.06600 | 73.67000 | 74.38000 | 74.63600 | 74.90100 | 76.22200 | 76.45300 | 76.68300 | 76.90900 | 77.12900 | 77.48800 | 78.00300 | 78.33400 | 78.51700 | 78.71600 | 78.85300 | 79.04400 | 79.22300 | 79.33500 | 79.50400 | 79.62700 | 79.72600 | 78.94600 | 78.71000 | 79.19600 | NA | NA | 
| Argentina | ARG | Life expectancy at birth, total (years) | SP.DYN.LE00.IN | 63.97800 | 64.36000 | 64.24400 | 64.44900 | 64.36300 | 64.59300 | 64.89100 | 64.99200 | 64.89000 | 64.85900 | 65.58900 | 65.54100 | 65.92300 | 66.32300 | 66.56300 | 67.08100 | 67.22800 | 67.86100 | 68.19700 | 68.49100 | 68.56400 | 68.97600 | 68.93700 | 69.26700 | 69.19500 | 69.65100 | 70.11900 | 70.56400 | 71.05200 | 71.42500 | 71.78400 | 72.31900 | 72.43000 | 72.56500 | 73.17200 | 73.13300 | 73.30700 | 73.09000 | 73.47400 | 73.72200 | 73.92600 | 74.18600 | 74.40800 | 74.08000 | 74.85500 | 75.13900 | 75.43300 | 75.00600 | 75.64100 | 75.93600 | 75.72100 | 76.12400 | 76.46700 | 76.49100 | 76.75500 | 76.76000 | 76.30800 | 76.83300 | 76.99900 | 77.28400 | 75.89200 | 75.39000 | 76.06400 | NA | NA | 
8.3 Funciones
En esta sección, se describen y ejemplifican las principales funciones de dplyr.
8.3.1 select()
La función select() selecciona (y opcionalmente renombra) columnas de un data frame con base en sus nombres.
# Selección de las columnas ADM0_ISO, NAME, POP_EST, GDP_MD
paises |>
  select(ADM0_ISO, NAME, POP_EST, GDP_MD)# A tibble: 201 × 4
   ADM0_ISO NAME              POP_EST   GDP_MD
   <chr>    <chr>               <dbl>    <dbl>
 1 IDN      Indonesia       270625568  1119190
 2 MYS      Malaysia         31949777   364681
 3 CHL      Chile            18952038   282318
 4 BOL      Bolivia          11513100    40895
 5 PER      Peru             32510453   226848
 6 ARG      Argentina        44938712   445445
 7 GBR      United Kingdom   67366465  2863166
 8 CYP      Cyprus            1198575    24948
 9 IND      India          1366417754  2868929
10 CHN      China          1405862845 14762473
# ℹ 191 more rowsCambio de nombres de columnas:
# Selección y cambio de nombre de las columnas 
# ADM0_ISO, NAME, POP_EST, GDP_MD
paises |>
  select(CODIGO_ISO_3 = ADM0_ISO,
         NOMBRE = NAME,
         POBLACION_ESTIMADA = POP_EST,
         PIB_MD = GDP_MD)# A tibble: 201 × 4
   CODIGO_ISO_3 NOMBRE         POBLACION_ESTIMADA   PIB_MD
   <chr>        <chr>                       <dbl>    <dbl>
 1 IDN          Indonesia               270625568  1119190
 2 MYS          Malaysia                 31949777   364681
 3 CHL          Chile                    18952038   282318
 4 BOL          Bolivia                  11513100    40895
 5 PER          Peru                     32510453   226848
 6 ARG          Argentina                44938712   445445
 7 GBR          United Kingdom           67366465  2863166
 8 CYP          Cyprus                    1198575    24948
 9 IND          India                  1366417754  2868929
10 CHN          China                  1405862845 14762473
# ℹ 191 more rowsEl operador : permite seleccionar un rango de columnas continuas:
# Selección de las columnas desde CONTINENT hasta INCOME_GRP
paises |>
  select(CONTINENT:INCOME_GRP)# A tibble: 201 × 6
   CONTINENT     REGION_UN SUBREGION          REGION_WB       ECONOMY INCOME_GRP
   <chr>         <chr>     <chr>              <chr>           <chr>   <chr>     
 1 Asia          Asia      South-Eastern Asia East Asia & Pa… 4. Eme… 4. Lower …
 2 Asia          Asia      South-Eastern Asia East Asia & Pa… 6. Dev… 3. Upper …
 3 South America Americas  South America      Latin America … 5. Eme… 3. Upper …
 4 South America Americas  South America      Latin America … 5. Eme… 4. Lower …
 5 South America Americas  South America      Latin America … 5. Eme… 3. Upper …
 6 South America Americas  South America      Latin America … 5. Eme… 3. Upper …
 7 Europe        Europe    Northern Europe    Europe & Centr… 1. Dev… 1. High i…
 8 Asia          Asia      Western Asia       Europe & Centr… 6. Dev… 2. High i…
 9 Asia          Asia      Southern Asia      South Asia      3. Eme… 4. Lower …
10 Asia          Asia      Eastern Asia       East Asia & Pa… 3. Eme… 3. Upper …
# ℹ 191 more rowsSelección de todas las columnas que cumplen una condición:
# Selección de las columnas numéricas
paises |>
  select(where(is.numeric))# A tibble: 201 × 2
      POP_EST   GDP_MD
        <dbl>    <dbl>
 1  270625568  1119190
 2   31949777   364681
 3   18952038   282318
 4   11513100    40895
 5   32510453   226848
 6   44938712   445445
 7   67366465  2863166
 8    1198575    24948
 9 1366417754  2868929
10 1405862845 14762473
# ℹ 191 more rows8.3.2 filter()
La función filter() retorna un subconjunto de un data frame con todas las filas que satisfacen una condición (i.e. expresión lógica).
Puede utilizar los operadores relacionales:
- ==(igual que) Note la diferencia con el operador de asignación (- =)
- !=(diferente de)
- >(estrictamente mayor que),- >=(mayor o igual que)
- <(estrictamente menor que),- <=(menor o igual que)
Y los operadores lógicos:
- &(AND o Y lógico)
- |(OR u O lógico)
- !(NOT o NO lógico)
Ejemplos de uso de expresiones y operadores lógicos:
# Países de Asia con ingresos alto y en la OCDE
# 
paises |>
  filter(CONTINENT == 'Asia' & INCOME_GRP == '1. High income: OECD')# A tibble: 3 × 10
  ADM0_ISO NAME       CONTINENT REGION_UN SUBREGION REGION_WB ECONOMY INCOME_GRP
  <chr>    <chr>      <chr>     <chr>     <chr>     <chr>     <chr>   <chr>     
1 ISR      Israel     Asia      Asia      Western … Middle E… 2. Dev… 1. High i…
2 KOR      South Kor… Asia      Asia      Eastern … East Asi… 4. Eme… 1. High i…
3 JPN      Japan      Asia      Asia      Eastern … East Asi… 1. Dev… 1. High i…
# ℹ 2 more variables: POP_EST <dbl>, GDP_MD <dbl># Países de América del Norte o de América del Sur
paises |>
  filter(CONTINENT == 'North America' | CONTINENT == 'South America')# A tibble: 35 × 10
   ADM0_ISO NAME      CONTINENT REGION_UN SUBREGION REGION_WB ECONOMY INCOME_GRP
   <chr>    <chr>     <chr>     <chr>     <chr>     <chr>     <chr>   <chr>     
 1 CHL      Chile     South Am… Americas  South Am… Latin Am… 5. Eme… 3. Upper …
 2 BOL      Bolivia   South Am… Americas  South Am… Latin Am… 5. Eme… 4. Lower …
 3 PER      Peru      South Am… Americas  South Am… Latin Am… 5. Eme… 3. Upper …
 4 ARG      Argentina South Am… Americas  South Am… Latin Am… 5. Eme… 3. Upper …
 5 SUR      Suriname  South Am… Americas  South Am… Latin Am… 6. Dev… 3. Upper …
 6 GUY      Guyana    South Am… Americas  South Am… Latin Am… 6. Dev… 4. Lower …
 7 CRI      Costa Ri… North Am… Americas  Central … Latin Am… 5. Eme… 3. Upper …
 8 NIC      Nicaragua North Am… Americas  Central … Latin Am… 6. Dev… 4. Lower …
 9 BRA      Brazil    South Am… Americas  South Am… Latin Am… 3. Eme… 3. Upper …
10 URY      Uruguay   South Am… Americas  South Am… Latin Am… 5. Eme… 3. Upper …
# ℹ 25 more rows
# ℹ 2 more variables: POP_EST <dbl>, GDP_MD <dbl># Países no europeos
paises |>
  filter(!(CONTINENT == 'Europe'))# A tibble: 156 × 10
   ADM0_ISO NAME      CONTINENT REGION_UN SUBREGION REGION_WB ECONOMY INCOME_GRP
   <chr>    <chr>     <chr>     <chr>     <chr>     <chr>     <chr>   <chr>     
 1 IDN      Indonesia Asia      Asia      South-Ea… East Asi… 4. Eme… 4. Lower …
 2 MYS      Malaysia  Asia      Asia      South-Ea… East Asi… 6. Dev… 3. Upper …
 3 CHL      Chile     South Am… Americas  South Am… Latin Am… 5. Eme… 3. Upper …
 4 BOL      Bolivia   South Am… Americas  South Am… Latin Am… 5. Eme… 4. Lower …
 5 PER      Peru      South Am… Americas  South Am… Latin Am… 5. Eme… 3. Upper …
 6 ARG      Argentina South Am… Americas  South Am… Latin Am… 5. Eme… 3. Upper …
 7 CYP      Cyprus    Asia      Asia      Western … Europe &… 6. Dev… 2. High i…
 8 IND      India     Asia      Asia      Southern… South As… 3. Eme… 4. Lower …
 9 CHN      China     Asia      Asia      Eastern … East Asi… 3. Eme… 3. Upper …
10 ISR      Israel    Asia      Asia      Western … Middle E… 2. Dev… 1. High i…
# ℹ 146 more rows
# ℹ 2 more variables: POP_EST <dbl>, GDP_MD <dbl># Países de Europa en el G7
# solo con las columnas ADM0_ISO, NAME, POP_EST
paises |>
  filter(CONTINENT == "Europe" & ECONOMY == "1. Developed region: G7") |>
  select(ADM0_ISO, NAME, POP_EST) |>
  kable()| ADM0_ISO | NAME | POP_EST | 
|---|---|---|
| GBR | United Kingdom | 67366465 | 
| FRA | France | 67692632 | 
| DEU | Germany | 83132799 | 
| ITA | Italy | 60297396 | 
# Países con población mayor o igual al promedio
#   El argumento lógico na.rm de mean() 
#   indica si los valores NA ("not available") 
#   deben ser removidos antes del cálculo
paises |>
  filter(POP_EST >= mean(POP_EST, na.rm = TRUE)) |>
  select(ADM0_ISO, NAME, POP_EST)# A tibble: 36 × 3
   ADM0_ISO NAME              POP_EST
   <chr>    <chr>               <dbl>
 1 IDN      Indonesia       270625568
 2 ARG      Argentina        44938712
 3 GBR      United Kingdom   67366465
 4 IND      India          1366417754
 5 CHN      China          1405862845
 6 ETH      Ethiopia        112078730
 7 KEN      Kenya            52573973
 8 TZA      Tanzania         58005463
 9 FRA      France           67692632
10 KOR      South Korea      51709098
# ℹ 26 more rowsCondiciones relacionadas con valores NA (nulos):
# Filas con valor NA en la columna 2022 (año 2022)
# del conjunto de datos de esperanza de vida
esperanza_vida |>
  select(`Country Name`, `2022`) |>
  filter(is.na(`2022`))# A tibble: 9 × 2
  `Country Name`           `2022`
  <chr>                     <dbl>
1 Andorra                      NA
2 American Samoa               NA
3 Curacao                      NA
4 Cayman Islands               NA
5 Not classified               NA
6 Monaco                       NA
7 Northern Mariana Islands     NA
8 Palau                        NA
9 San Marino                   NANote como en el bloque anterior las columnas Country Name y 2022 deben escribirse entre comillas inversas debido a que una contiene espacios y la otra comienza con un número.
La función tidyr::drop_na() remueve las filas con valores NA en una o varias columnas.
# Filas con valor diferente a NA en la columna 2022
esperanza_vida |>
  select(`Country Name`,
         `2022`) |>
  drop_na(`2022`)# A tibble: 257 × 2
   `Country Name`              `2022`
   <chr>                        <dbl>
 1 Aruba                         75.0
 2 Africa Eastern and Southern   62.9
 3 Afghanistan                   62.9
 4 Africa Western and Central    57.6
 5 Angola                        61.9
 6 Albania                       76.8
 7 Arab World                    71.2
 8 United Arab Emirates          79.2
 9 Argentina                     76.1
10 Armenia                       73.4
# ℹ 247 more rows# Filas con valor diferente a NA en cualquier columna
penguins |>
  select(species,
         bill_length_mm,
         bill_depth_mm,
         flipper_length_mm,
         body_mass_g,
         sex) |>
  drop_na()# A tibble: 333 × 6
   species bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex   
   <fct>            <dbl>         <dbl>             <int>       <int> <fct> 
 1 Adelie            39.1          18.7               181        3750 male  
 2 Adelie            39.5          17.4               186        3800 female
 3 Adelie            40.3          18                 195        3250 female
 4 Adelie            36.7          19.3               193        3450 female
 5 Adelie            39.3          20.6               190        3650 male  
 6 Adelie            38.9          17.8               181        3625 female
 7 Adelie            39.2          19.6               195        4675 male  
 8 Adelie            41.1          17.6               182        3200 female
 9 Adelie            38.6          21.2               191        3800 male  
10 Adelie            34.6          21.1               198        4400 male  
# ℹ 323 more rows8.3.3 arrange()
La función arrange() cambia el orden de las filas de un data frame de acuerdo con los valores de las columnas seleccionadas.
# Ordenamiento ascendente por las columnas POP_EST y GDP_MD
paises |>
  arrange(POP_EST, GDP_MD) |>
  select(NAME, POP_EST, GDP_MD)# A tibble: 201 × 3
   NAME                    POP_EST GDP_MD
   <chr>                     <dbl>  <dbl>
 1 Vatican                     825    -99
 2 Antarctica                 4490    898
 3 Cyprus U.N. Buffer Zone   10000    280
 4 Tuvalu                    11646     47
 5 Nauru                     12581    118
 6 Palau                     18008    268
 7 San Marino                33860   1655
 8 Liechtenstein             38019   6876
 9 Monaco                    38964   7188
10 St. Kitts and Nevis       52834   1053
# ℹ 191 more rowsPor defecto, las columnas se ordenan de manera acendente. Si se desea un orden descendente, puede utilizarse la función desc().
# Ordenamiento descendente por las columnas POP_EST y GDP_MD
paises |>
  arrange(desc(POP_EST), desc(GDP_MD)) |>
  select(NAME, POP_EST, GDP_MD)# A tibble: 201 × 3
   NAME                        POP_EST   GDP_MD
   <chr>                         <dbl>    <dbl>
 1 China                    1405862845 14762473
 2 India                    1366417754  2868929
 3 United States of America  331595460 21542705
 4 Indonesia                 270625568  1119190
 5 Pakistan                  216565318   278221
 6 Brazil                    211049527  1839758
 7 Nigeria                   200963599   448120
 8 Bangladesh                163046161   302571
 9 Russia                    144373535  1699876
10 Mexico                    127575529  1268870
# ℹ 191 more rowsLos valores NA (si hay alguno) se ubican al final de cualquier ordenamiento.
8.3.4 mutate()
La función mutate() crea o modifica columnas en un data frame.
# Creación de la columna GDP_PC,
# correspondiente al producto interno bruto per cápita en dólares
paises <-
  paises |>
  mutate(GDP_PC = (GDP_MD * 1000000) / POP_EST)
# Despliegue
paises |>
  select(NAME, GDP_MD, POP_EST, GDP_PC)# A tibble: 201 × 4
   NAME             GDP_MD    POP_EST GDP_PC
   <chr>             <dbl>      <dbl>  <dbl>
 1 Indonesia       1119190  270625568  4136.
 2 Malaysia         364681   31949777 11414.
 3 Chile            282318   18952038 14896.
 4 Bolivia           40895   11513100  3552.
 5 Peru             226848   32510453  6978.
 6 Argentina        445445   44938712  9912.
 7 United Kingdom  2863166   67366465 42501.
 8 Cyprus            24948    1198575 20815.
 9 India           2868929 1366417754  2100.
10 China          14762473 1405862845 10501.
# ℹ 191 more rows8.3.5 group_by() y summarize()
La función summarize() se utiliza generalmente junto con la función group_by() para realizar cálculos en grupos de filas de un data frame. group_by() agrupa las filas y summarize() realiza los cálculos (ej. sumas, promedios) en las columnas, para cada grupo. El resultado es un nuevo data frame con una fila por grupo. Si no hay agrupación, se retorna una sola fila correspondiente a los cálculos para todo el data frame.
Ejemplos de cálculos en grupos:
# Mínimo, máximo, promedio de población y cantidad de países
# para cada región de la ONU
paises |>
  group_by(REGION_UN) |>
  summarize(
    POP_EST_MIN = min(POP_EST, na.rm = TRUE),
    POP_EST_MAX = max(POP_EST, na.rm = TRUE),
    POP_EST_MEAN = mean(POP_EST, na.rm = TRUE),
    n = n()
  )# A tibble: 6 × 5
  REGION_UN  POP_EST_MIN POP_EST_MAX POP_EST_MEAN     n
  <chr>            <dbl>       <dbl>        <dbl> <int>
1 Africa           97625   200963599    23381240.    56
2 Americas         52834   331595460    28909700.    35
3 Antarctica        4490        4490        4490      1
4 Asia             10000  1405862845    91256711.    50
5 Europe             825   144373535    16615735.    45
6 Oceania          11646    25368867     2970679.    14La función n() cuenta la cantidad de filas en un grupo.
# Cantidad de países por región y subregión de la ONU
paises |>
  group_by(REGION_UN, SUBREGION) |>
  summarize(
    N = n()
  ) |>
  arrange(desc(N)) |>
  kable()| REGION_UN | SUBREGION | N | 
|---|---|---|
| Africa | Eastern Africa | 19 | 
| Asia | Western Asia | 19 | 
| Africa | Western Africa | 16 | 
| Europe | Southern Europe | 16 | 
| Americas | Caribbean | 13 | 
| Americas | South America | 12 | 
| Asia | South-Eastern Asia | 11 | 
| Europe | Eastern Europe | 10 | 
| Europe | Northern Europe | 10 | 
| Africa | Middle Africa | 9 | 
| Asia | Southern Asia | 9 | 
| Europe | Western Europe | 9 | 
| Americas | Central America | 8 | 
| Africa | Northern Africa | 7 | 
| Asia | Eastern Asia | 6 | 
| Africa | Southern Africa | 5 | 
| Asia | Central Asia | 5 | 
| Oceania | Micronesia | 5 | 
| Oceania | Melanesia | 4 | 
| Oceania | Polynesia | 3 | 
| Americas | Northern America | 2 | 
| Oceania | Australia and New Zealand | 2 | 
| Antarctica | Antarctica | 1 | 
Ejemplo de cálculos sin agrupamiento:
# Promedio de GDP_PC y cantidad de países del mundo
paises |>
  summarise(GDP_PC_MEAN = mean(GDP_PC, na.rm = TRUE),
            n = n())# A tibble: 1 × 2
  GDP_PC_MEAN     n
        <dbl> <int>
1      15836.   2018.3.6 Otras
8.3.6.1 distinct()
La función distinct() retorna las combinaciones únicas de filas en un data frame.
# Valores distintos de la columna CONTINENT
paises |>
  distinct(CONTINENT) |>
  kable()| CONTINENT | 
|---|
| Asia | 
| South America | 
| Europe | 
| Africa | 
| North America | 
| Oceania | 
| Antarctica | 
| Seven seas (open ocean) | 
8.3.6.2 count()
Una forma alternativa a summarize() para realizar un conteo es con la función count():
# Conteo de países por continente
paises |>
  count(CONTINENT)# A tibble: 8 × 2
  CONTINENT                   n
  <chr>                   <int>
1 Africa                     54
2 Antarctica                  1
3 Asia                       49
4 Europe                     45
5 North America              23
6 Oceania                    14
7 Seven seas (open ocean)     3
8 South America              12# Expresión equivalente con summarize
paises |>
  group_by(CONTINENT) |>
  summarize(n = n()) |>
  kable()| CONTINENT | n | 
|---|---|
| Africa | 54 | 
| Antarctica | 1 | 
| Asia | 49 | 
| Europe | 45 | 
| North America | 23 | 
| Oceania | 14 | 
| Seven seas (open ocean) | 3 | 
| South America | 12 | 
8.4 Ejercicios
Utilice las funciones de dplyr para responder a las siguientes preguntas sobre el conjunto de datos paises:
- ¿Cuántos países hay en cada región del Banco Mundial?
- ¿Cuál es el mínimo, máximo y promedio de producto interno bruto per cápita en el continente africano?
- ¿Cuál es el promedio de producto interno bruto per cápita por región del Banco Mundial?
8.5 Recursos de interés
RStudio. (2017). Data transformation with dplyr::Cheat Sheet. https://github.com/rstudio/cheatsheets/blob/45c1e642468695830fd8b724587ccfe8901e2185/data-transformation.pdf