library(gapminder)
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
Es posible acceder a una ventana de visualización de tablas en el panel de Edición si usamos la función View() en nuestra sesión de RStudio. Es el mismo panel que aparece cuando hacemos click en el nombre de una tabla en el Environment.
library(ggplot2)
library(nycflights13)
El paquete dplyr nos permite transformar nuestros datos tabulares. Una ventaja de este paquete es que sus funciones utilizan verbos para representar las acciones que queremos realizar en el contexto de nuestro análisis de datos. Por ejemplo:
Seleccionar variables por su nombre con select(). Filtrar observaciones de acuerdo a sus valores con filter(). Organizar las filas de acuerdo a sus valores con arrange(). 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().
Otra característica de las funciones verbo de dplyr es que su primer argumento será siempre el tibble que queremos transformar. Más adelante, esto permitirá encadenar las funciones con el operador pipe.
Todas las operaciones descritas anteriormente pueden hacerse con funciones de R base, sin embargo no con una interfaz consistente entre funciones y paquetes.
Para poder usar sus funciones, debemos cargar el paquete. Como forma parte de los paquetes del tidyverse, podemos cargar todos juntos a la vez.
library(dbplyr)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ tibble 3.1.1 ✓ dplyr 1.0.7
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ✓ purrr 0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::ident() masks dbplyr::ident()
## x dplyr::lag() masks stats::lag()
## x dplyr::sql() masks dbplyr::sql()
Para esta sección, usaremos como ejemplo el conjunto de datos gapminder del paquete gapminder.
library(gapminder)
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
rename() Esta función nos permite cambiar el nombre de nuestras columnas. Debemos especificar:
El nombre del conjunto de datos El cambio de nombre, usando la sintaxis nuevo_nombre = nombre_anterior
rename(data, nombre_nuevo = nombre_anterior)
rename(gapminder, pais = country)
## # A tibble: 1,704 x 6
## pais 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
rename(gapminder,
pais = country,
continente = continent,
anio = year,
exp_de_vida = lifeExp,
poblacion = pop,
pbi_per_cap = gdpPercap)
## # A tibble: 1,704 x 6
## pais continente anio exp_de_vida poblacion pbi_per_cap
## <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
relocate()
Esta función permite cambiar la ubicación de nuestras columnas. Debemos especificar:
El nombre del conjunto de datos Los nombres de columna que queremos reubicar
relocate(data, columna_reubicada1, columna_reubicada2, …)
Por defecto, pondrá las columnas especificadas como primera columna.
relocate(gapminder, gdpPercap)
## # A tibble: 1,704 x 6
## gdpPercap country continent year lifeExp pop
## <dbl> <fct> <fct> <int> <dbl> <int>
## 1 779. Afghanistan Asia 1952 28.8 8425333
## 2 821. Afghanistan Asia 1957 30.3 9240934
## 3 853. Afghanistan Asia 1962 32.0 10267083
## 4 836. Afghanistan Asia 1967 34.0 11537966
## 5 740. Afghanistan Asia 1972 36.1 13079460
## 6 786. Afghanistan Asia 1977 38.4 14880372
## 7 978. Afghanistan Asia 1982 39.9 12881816
## 8 852. Afghanistan Asia 1987 40.8 13867957
## 9 649. Afghanistan Asia 1992 41.7 16317921
## 10 635. Afghanistan Asia 1997 41.8 22227415
## # … with 1,694 more rows
Es posible especificar una posición en especial con los argumentos .before (antes) o .after (después).
relocate(gapminder, gdpPercap, .before = year)
## # A tibble: 1,704 x 6
## country continent gdpPercap year lifeExp pop
## <fct> <fct> <dbl> <int> <dbl> <int>
## 1 Afghanistan Asia 779. 1952 28.8 8425333
## 2 Afghanistan Asia 821. 1957 30.3 9240934
## 3 Afghanistan Asia 853. 1962 32.0 10267083
## 4 Afghanistan Asia 836. 1967 34.0 11537966
## 5 Afghanistan Asia 740. 1972 36.1 13079460
## 6 Afghanistan Asia 786. 1977 38.4 14880372
## 7 Afghanistan Asia 978. 1982 39.9 12881816
## 8 Afghanistan Asia 852. 1987 40.8 13867957
## 9 Afghanistan Asia 649. 1992 41.7 16317921
## 10 Afghanistan Asia 635. 1997 41.8 22227415
## # … with 1,694 more rows
relocate(gapminder, gdpPercap, .after = year)
## # A tibble: 1,704 x 6
## country continent year gdpPercap lifeExp pop
## <fct> <fct> <int> <dbl> <dbl> <int>
## 1 Afghanistan Asia 1952 779. 28.8 8425333
## 2 Afghanistan Asia 1957 821. 30.3 9240934
## 3 Afghanistan Asia 1962 853. 32.0 10267083
## 4 Afghanistan Asia 1967 836. 34.0 11537966
## 5 Afghanistan Asia 1972 740. 36.1 13079460
## 6 Afghanistan Asia 1977 786. 38.4 14880372
## 7 Afghanistan Asia 1982 978. 39.9 12881816
## 8 Afghanistan Asia 1987 852. 40.8 13867957
## 9 Afghanistan Asia 1992 649. 41.7 16317921
## 10 Afghanistan Asia 1997 635. 41.8 22227415
## # … with 1,694 more rows
select() La función select() nos permite seleccionar columnas específicas de nuestro tibble Supongamos que sólo queremos los nombres de los países, el año y el total de población. Podemos hacerlo con select().
Debemos especificar:
El nombre del conjunto de datos Las variables a escoger
select(data, columna_escogida1, columna_escogida2, …)
Las columnas escogidas aparecen en el orden especificado.
select(gapminder, country, year, pop)
## # A tibble: 1,704 x 3
## country year pop
## <fct> <int> <int>
## 1 Afghanistan 1952 8425333
## 2 Afghanistan 1957 9240934
## 3 Afghanistan 1962 10267083
## 4 Afghanistan 1967 11537966
## 5 Afghanistan 1972 13079460
## 6 Afghanistan 1977 14880372
## 7 Afghanistan 1982 12881816
## 8 Afghanistan 1987 13867957
## 9 Afghanistan 1992 16317921
## 10 Afghanistan 1997 22227415
## # … with 1,694 more rows
También es posible escoger columnas usando su posición en el conjunto de datos con números.
select(gapminder, 1, 3, 5)
## # A tibble: 1,704 x 3
## country year pop
## <fct> <int> <int>
## 1 Afghanistan 1952 8425333
## 2 Afghanistan 1957 9240934
## 3 Afghanistan 1962 10267083
## 4 Afghanistan 1967 11537966
## 5 Afghanistan 1972 13079460
## 6 Afghanistan 1977 14880372
## 7 Afghanistan 1982 12881816
## 8 Afghanistan 1987 13867957
## 9 Afghanistan 1992 16317921
## 10 Afghanistan 1997 22227415
## # … with 1,694 more rows
Quitar variables
Si por el contrario, lo que queremos es dejar fuera alguna variable, basta con anteponerle el signo negativo al nombre de la columna. En este ejemplo queremos dejar fuera la columna pop y lifeExp.
select(gapminder, -pop, -lifeExp)
## # A tibble: 1,704 x 4
## country continent year gdpPercap
## <fct> <fct> <int> <dbl>
## 1 Afghanistan Asia 1952 779.
## 2 Afghanistan Asia 1957 821.
## 3 Afghanistan Asia 1962 853.
## 4 Afghanistan Asia 1967 836.
## 5 Afghanistan Asia 1972 740.
## 6 Afghanistan Asia 1977 786.
## 7 Afghanistan Asia 1982 978.
## 8 Afghanistan Asia 1987 852.
## 9 Afghanistan Asia 1992 649.
## 10 Afghanistan Asia 1997 635.
## # … with 1,694 more rows
Cambiar nombres con select()
Si usamos una sintaxis como la de rename(), podemos cambiar el nombre de las columnas al mismo tiempo que seleccionarlas.
select(gapminder,
pais = country,
anio = year,
poblacion = pop)
## # A tibble: 1,704 x 3
## pais anio poblacion
## <fct> <int> <int>
## 1 Afghanistan 1952 8425333
## 2 Afghanistan 1957 9240934
## 3 Afghanistan 1962 10267083
## 4 Afghanistan 1967 11537966
## 5 Afghanistan 1972 13079460
## 6 Afghanistan 1977 14880372
## 7 Afghanistan 1982 12881816
## 8 Afghanistan 1987 13867957
## 9 Afghanistan 1992 16317921
## 10 Afghanistan 1997 22227415
## # … with 1,694 more rows
Opciones avanzadas de selección
La función select() puede hacer uso de funciones de apoyo del paquete tidyselect(), que se cargan automáticamente junto con dplyr.
Para ejemplificar, usaremos el conjunto de datos flights del paquete nycflights13.
library(nycflights13)
flights
## # A tibble: 336,776 x 19
## year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
## <int> <int> <int> <int> <int> <dbl> <int> <int>
## 1 2013 1 1 517 515 2 830 819
## 2 2013 1 1 533 529 4 850 830
## 3 2013 1 1 542 540 2 923 850
## 4 2013 1 1 544 545 -1 1004 1022
## 5 2013 1 1 554 600 -6 812 837
## 6 2013 1 1 554 558 -4 740 728
## 7 2013 1 1 555 600 -5 913 854
## 8 2013 1 1 557 600 -3 709 723
## 9 2013 1 1 557 600 -3 838 846
## 10 2013 1 1 558 600 -2 753 745
## # … with 336,766 more rows, and 11 more variables: arr_delay <dbl>,
## # carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## # air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
Secuencia de variables
Es posible seleccionar una secuencia de variables consecutivas si usamos el operador de secuencia (:).
select(flights, dep_time:sched_arr_time)
## # A tibble: 336,776 x 5
## dep_time sched_dep_time dep_delay arr_time sched_arr_time
## <int> <int> <dbl> <int> <int>
## 1 517 515 2 830 819
## 2 533 529 4 850 830
## 3 542 540 2 923 850
## 4 544 545 -1 1004 1022
## 5 554 600 -6 812 837
## 6 554 558 -4 740 728
## 7 555 600 -5 913 854
## 8 557 600 -3 709 723
## 9 557 600 -3 838 846
## 10 558 600 -2 753 745
## # … with 336,766 more rows
Seleccionar basado en patrón Es posible usar funciones que nos permiten hacer match de los nombres de nuestras columnas con caracteres de texto:
starts_with(): El nombre empieza con un prefijo determinado ends_with(): El nombre termina con un sufijo determinado contains(): El nombre contiene una cadena de texto matches(): El nombre hace match con una expresión regular (avanzado) Los patrones de texto deben especificarse entre comillas (").
select(flights, starts_with("dep"))
## # A tibble: 336,776 x 2
## dep_time dep_delay
## <int> <dbl>
## 1 517 2
## 2 533 4
## 3 542 2
## 4 544 -1
## 5 554 -6
## 6 554 -4
## 7 555 -5
## 8 557 -3
## 9 557 -3
## 10 558 -2
## # … with 336,766 more rows
select(flights, ends_with("delay"))
## # A tibble: 336,776 x 2
## dep_delay arr_delay
## <dbl> <dbl>
## 1 2 11
## 2 4 20
## 3 2 33
## 4 -1 -18
## 5 -6 -25
## 6 -4 12
## 7 -5 19
## 8 -3 -14
## 9 -3 -8
## 10 -2 8
## # … with 336,766 more rows
select(flights, contains("time"))
## # A tibble: 336,776 x 6
## dep_time sched_dep_time arr_time sched_arr_time air_time time_hour
## <int> <int> <int> <int> <dbl> <dttm>
## 1 517 515 830 819 227 2013-01-01 05:00:00
## 2 533 529 850 830 227 2013-01-01 05:00:00
## 3 542 540 923 850 160 2013-01-01 05:00:00
## 4 544 545 1004 1022 183 2013-01-01 05:00:00
## 5 554 600 812 837 116 2013-01-01 06:00:00
## 6 554 558 740 728 150 2013-01-01 05:00:00
## 7 555 600 913 854 158 2013-01-01 06:00:00
## 8 557 600 709 723 53 2013-01-01 06:00:00
## 9 557 600 838 846 140 2013-01-01 06:00:00
## 10 558 600 753 745 138 2013-01-01 06:00:00
## # … with 336,766 more rows
select(flights, matches("a(i|r)r_time"))
## # A tibble: 336,776 x 3
## arr_time sched_arr_time air_time
## <int> <int> <dbl>
## 1 830 819 227
## 2 850 830 227
## 3 923 850 160
## 4 1004 1022 183
## 5 812 837 116
## 6 740 728 150
## 7 913 854 158
## 8 709 723 53
## 9 838 846 140
## 10 753 745 138
## # … with 336,766 more rows
Combinando todo
Es posible combinar todas las formas de selección dentro de una sola llamada a select().
select(flights, year:day, starts_with("arr"))
## # A tibble: 336,776 x 5
## year month day arr_time arr_delay
## <int> <int> <int> <int> <dbl>
## 1 2013 1 1 830 11
## 2 2013 1 1 850 20
## 3 2013 1 1 923 33
## 4 2013 1 1 1004 -18
## 5 2013 1 1 812 -25
## 6 2013 1 1 740 12
## 7 2013 1 1 913 19
## 8 2013 1 1 709 -14
## 9 2013 1 1 838 -8
## 10 2013 1 1 753 8
## # … with 336,766 more rows
filter() La función filter() nos simplifica la tarea de hacer subsetting (escoger un subconjunto de nuestros datos). Debemos especificar dos elementos:
El nombre del conjunto de datos La condición que tiene cumplir una observación para permanecer. Para establecer las condiciones, debemos usar operaciones lógicas. Del mismo modo que los operadores aritméticos nos permiten obtener un resultado aritmético (aka, numérico) en nuestros cálculos, existen otros operadores que nos permiten obtener resultados lógicos.
En esta sección, usaremos gapminder como ejemplo.
Operadores relacionales Los primeros de ellos son los relacionales, y ya los conocemos desde el colegio, pero es bueno saber cómo escribirlos en R. La siguiente tabla nos muestra para qué sirve cada uno de ellos.
Subsetting con operadores relacionales De entre todas las observaciones, podemos escoger aquellas cuyo país sea “Perú”. Para ello, usamos la operación country == “Peru”.
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.
También podemos hacer comparaciones basadas en números. Por ejemplo, todas las observaciones correspondientes al año 2007.
filter(gapminder, year == 2007)
## # A tibble: 142 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 2007 43.8 31889923 975.
## 2 Albania Europe 2007 76.4 3600523 5937.
## 3 Algeria Africa 2007 72.3 33333216 6223.
## 4 Angola Africa 2007 42.7 12420476 4797.
## 5 Argentina Americas 2007 75.3 40301927 12779.
## 6 Australia Oceania 2007 81.2 20434176 34435.
## 7 Austria Europe 2007 79.8 8199783 36126.
## 8 Bahrain Asia 2007 75.6 708573 29796.
## 9 Bangladesh Asia 2007 64.1 150448339 1391.
## 10 Belgium Europe 2007 79.4 10392226 33693.
## # … with 132 more rows
Podemos escoger sólo aquellas observaciones que cuya población sea mayor a mil millones.
filter(gapminder, pop > 1000000000)
## # A tibble: 8 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 China Asia 1982 65.5 1000281000 962.
## 2 China Asia 1987 67.3 1084035000 1379.
## 3 China Asia 1992 68.7 1164970000 1656.
## 4 China Asia 1997 70.4 1230075000 2289.
## 5 China Asia 2002 72.0 1280400000 3119.
## 6 China Asia 2007 73.0 1318683096 4959.
## 7 India Asia 2002 62.9 1034172547 1747.
## 8 India Asia 2007 64.7 1110396331 2452.
Podemos escoger las observaciones cuya expectativa de vida sea menor a 30 años.
filter(gapminder, lifeExp < 30)
## # A tibble: 2 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Rwanda Africa 1992 23.6 7290203 737.
Combinar más de una condición
Si usamos más de una condición, sólo permanecerán aquellas que cumplan con todas las expuestas. Por ejemplo, observaciones donde la población sea mayor a mil millones y la expectativa de vida mayor a 70 años.
filter(gapminder, pop > 1000000000, lifeExp > 70)
## # A tibble: 3 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 China Asia 1997 70.4 1230075000 2289.
## 2 China Asia 2002 72.0 1280400000 3119.
## 3 China Asia 2007 73.0 1318683096 4959.
Países de América a partir del 2002 cuyo PBI per cápita fue mayor a $15000.
filter(gapminder, continent == "Americas", year >= 2002, gdpPercap > 15000)
## # A tibble: 7 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Canada Americas 2002 79.8 31902268 33329.
## 2 Canada Americas 2007 80.7 33390141 36319.
## 3 Puerto Rico Americas 2002 77.8 3859606 18856.
## 4 Puerto Rico Americas 2007 78.7 3942491 19329.
## 5 Trinidad and Tobago Americas 2007 69.8 1056608 18009.
## 6 United States Americas 2002 77.3 287675526 39097.
## 7 United States Americas 2007 78.2 301139947 42952.
Operadores lógicos Para potenciar nuestras habilidades de comparación, podemos hacer uso de operadores lógicos. La siguiente tabla te muestra cuáles son:
Operador Uso & Y lógico | O lógico ! NO lógico Pueden usarse para obtener combinar comparaciones.
& (Y lógico) El Y lógico, en el contexto de filter() funciona de manera similar a ir agregando nuevas condiciones. Permite que permanezcan observaciones que satisfagan todas las condiciones. Por ejemplo, para obtener observaciones donde la población sea mayor a mil millones y la expectativa de vida mayor a 70 años.
filter(gapminder, pop > 1000000000 & lifeExp > 70)
## # A tibble: 3 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 China Asia 1997 70.4 1230075000 2289.
## 2 China Asia 2002 72.0 1280400000 3119.
## 3 China Asia 2007 73.0 1318683096 4959.
(O lógico) El O lógico permite que permanezcan las observaciones que satisfagan al menos una de las condiciones indicadas. Por ejemplo, para obtener las observaciones correspondientes a Perú o Colombia.
filter(gapminder, country == "Peru" | country == "Colombia")
## # A tibble: 24 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Colombia Americas 1952 50.6 12350771 2144.
## 2 Colombia Americas 1957 55.1 14485993 2324.
## 3 Colombia Americas 1962 57.9 17009885 2492.
## 4 Colombia Americas 1967 60.0 19764027 2679.
## 5 Colombia Americas 1972 61.6 22542890 3265.
## 6 Colombia Americas 1977 63.8 25094412 3816.
## 7 Colombia Americas 1982 66.7 27764644 4398.
## 8 Colombia Americas 1987 67.8 30964245 4903.
## 9 Colombia Americas 1992 68.4 34202721 5445.
## 10 Colombia Americas 1997 70.3 37657830 6117.
## # … with 14 more rows
Es posible ir agregando cuantos O lógicos sean necesarios para obtener todas las observaciones de un listado de países. Por ejemplo, los que pertenecen a la Alianza del Pacífico.
filter(gapminder,
country == "Peru" | country == "Chile"| country == "Colombia"| country == "Mexico")
## # A tibble: 48 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Chile Americas 1952 54.7 6377619 3940.
## 2 Chile Americas 1957 56.1 7048426 4316.
## 3 Chile Americas 1962 57.9 7961258 4519.
## 4 Chile Americas 1967 60.5 8858908 5107.
## 5 Chile Americas 1972 63.4 9717524 5494.
## 6 Chile Americas 1977 67.1 10599793 4757.
## 7 Chile Americas 1982 70.6 11487112 5096.
## 8 Chile Americas 1987 72.5 12463354 5547.
## 9 Chile Americas 1992 74.1 13572994 7596.
## 10 Chile Americas 1997 75.8 14599929 10118.
## # … with 38 more rows
%in% Sin embargo, R permite usar el operador %in% para usar condiciones basadas en un O lógico de manera más sencilla.
filter(gapminder, country %in% c("Peru", "Chile", "Colombia", "Mexico"))
## # A tibble: 48 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Chile Americas 1952 54.7 6377619 3940.
## 2 Chile Americas 1957 56.1 7048426 4316.
## 3 Chile Americas 1962 57.9 7961258 4519.
## 4 Chile Americas 1967 60.5 8858908 5107.
## 5 Chile Americas 1972 63.4 9717524 5494.
## 6 Chile Americas 1977 67.1 10599793 4757.
## 7 Chile Americas 1982 70.6 11487112 5096.
## 8 Chile Americas 1987 72.5 12463354 5547.
## 9 Chile Americas 1992 74.1 13572994 7596.
## 10 Chile Americas 1997 75.8 14599929 10118.
## # … with 38 more rows
! (NO lógico) Por último, puedes usar un NO lógico para obtener lo opuesto a lo indicado en tu condición. Por ejemplo, observaciones cuyo continente no sea Américas o Europa.No va antes de la operación
filter(gapminder, ! continent %in% c("Americas", "Europe"))
## # A tibble: 1,044 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,034 more rows
gapminder_subset Para el siguiente verbo vamos a trabajar con un subconjunto de observaciones de gapminder.
gapminder_subset <- filter(gapminder,
country %in% c("Peru", "Chile", "Colombia", "Mexico"),
year >= 2002)
gapminder_subset
## # A tibble: 8 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Chile Americas 2002 77.9 15497046 10779.
## 2 Chile Americas 2007 78.6 16284741 13172.
## 3 Colombia Americas 2002 71.7 41008227 5755.
## 4 Colombia Americas 2007 72.9 44227550 7007.
## 5 Mexico Americas 2002 74.9 102479927 10742.
## 6 Mexico Americas 2007 76.2 108700891 11978.
## 7 Peru Americas 2002 69.9 26769436 5909.
## 8 Peru Americas 2007 71.4 28674757 7409.
gapminder_subset está ordenado por el orden alfabético de la columna country.
arrange() La utilidad de arrange() es que nos permite ordenar nuestros datos en base a las variables que escojamos. Debes identificar:
El nombre del conjunto de datos Las columnas para el ordenamiento y su tipo de orden. Por defecto, el conjunto de datos se ordenará de manera ascendente. Los caracteres de texto se ordenarán en orden alfabético y los números de menor a mayor.
Podemos indicar que el conjunto de datos se ordene por año.
arrange(gapminder_subset, year)
## # A tibble: 8 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Chile Americas 2002 77.9 15497046 10779.
## 2 Colombia Americas 2002 71.7 41008227 5755.
## 3 Mexico Americas 2002 74.9 102479927 10742.
## 4 Peru Americas 2002 69.9 26769436 5909.
## 5 Chile Americas 2007 78.6 16284741 13172.
## 6 Colombia Americas 2007 72.9 44227550 7007.
## 7 Mexico Americas 2007 76.2 108700891 11978.
## 8 Peru Americas 2007 71.4 28674757 7409.
Ahora aparecen primero los datos del 2002 y luego los del 2007. Por defecto, el orden se hace en forma ascendente. Si uso la función desc() rodeando la columna elegida, el orden ahora es descendente.
arrange(gapminder_subset, desc(year))
## # A tibble: 8 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Chile Americas 2007 78.6 16284741 13172.
## 2 Colombia Americas 2007 72.9 44227550 7007.
## 3 Mexico Americas 2007 76.2 108700891 11978.
## 4 Peru Americas 2007 71.4 28674757 7409.
## 5 Chile Americas 2002 77.9 15497046 10779.
## 6 Colombia Americas 2002 71.7 41008227 5755.
## 7 Mexico Americas 2002 74.9 102479927 10742.
## 8 Peru Americas 2002 69.9 26769436 5909.
Puedo ordenar en base a más de una columna, sólo debo agregarla como otro argumento. Por ejemplo, si quiero ver el orden en las expectativas de vida por año.
arrange(gapminder_subset, year, lifeExp)
## # A tibble: 8 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Peru Americas 2002 69.9 26769436 5909.
## 2 Colombia Americas 2002 71.7 41008227 5755.
## 3 Mexico Americas 2002 74.9 102479927 10742.
## 4 Chile Americas 2002 77.9 15497046 10779.
## 5 Peru Americas 2007 71.4 28674757 7409.
## 6 Colombia Americas 2007 72.9 44227550 7007.
## 7 Mexico Americas 2007 76.2 108700891 11978.
## 8 Chile Americas 2007 78.6 16284741 13172.
En ambos años, Perú tuvo la expectativa de vida más baja.