elections$country[c(1,3)]
## [1] "Colombia" "Germany"
7 Selección de objetos
7.1 Introducción
Normalmente con R trabajaremos con marcos de datos de gran tamaño, pero a menudo nos puede interesar solo una pequeña parte de los datos. Por ejemplo, imaginemos que nos descargamos una base de datos que contiene información sobre varios países pero que solo nos interesa la relacionada con España.
Para este tipo de operaciones nos irán muy bien los corchetes [ ]
. Los corchetes se ponen justo después del objeto en cuestión y nos permiten seleccionar una parte de los datos de ese objeto. Su funcionamiento es algo distinto si los utilizamos para seleccionar elementos de un vector o elementos de un marco de datos.
objeto[ ]
7.2 Selección de vectores
Para seleccionar los elementos de un vector, pondremos los corchetes justo después del vector. Dentro de los corchetes, pondremos o bien un vector numérico o bien un vector lógico indicando los valores que seleccionamos:
vector[vector_numerico]
vector[vector_logico]
A continuación vemos ejemplos de cómo seleccionar partes de un vector mediante un vector numérico o un vector lógico.
Pondremos un vector numérico que indique la posición de los elementos que se desea conservar. Por ejemplo:
- Seleccionamos el primer y tercer valor del vector
elections$country
.
- Seleccionamos del segundo al quinto valor del vector
elections$country
.
elections$country[2:5]
## [1] "Japan" "Germany" "Chile" "New Zealand"
- Seleccionamos todos los valores menos el tercero del vector
elections$country
con el símbolo negativo antes del vector.
elections$country[-c(3)]
## [1] "Colombia" "Japan" "Chile" "New Zealand"
Podemos poner un vector lógico de igual longitud en el vector original que indique con TRUE
los elementos que se desea seleccionar. Por ejemplo:
- Seleccionamos el segundo y cuarto valor del vector
elections$country
.
elections$country[c(FALSE, TRUE, FALSE, TRUE, FALSE)]
## [1] "Japan" "Chile"
- Utilizamos un vector lógico ya existente para seleccionar los elementos que deseamos. En este caso, seleccionamos los países de
elections$country
que tienen elecciones presidenciales con el vectorelections$presidential
.
elections$country[elections$presidential]
## [1] "Colombia" "Chile"
Consulta el subapartado El poder de los vectores lógicos para saber más sobre cómo utilizar vectores lógicos para seleccionar elementos de objetos.
7.3 Selección de marcos de datos
Para seleccionar los elementos de un marco de datos, pondremos los corchetes justo después del marco de datos. Dentro de los corchetes situaremos una coma:
- A la izquierda de la coma indicaremos las filas con un vector numérico o lógico.
- A la derecha de la coma indicaremos las columnas con un vector numérico o de carácter.
- Si a un lado de la coma no damos ninguna indicación, nos devolverá todas las filas o todas las columnas según corresponda.
marcodatos[filas,columnas]
Veamos algunos ejemplos, utilizando el marco de datos elections
:
Seleccionamos de la primera a la tercera fila, dejamos las columnas en blanco.
elections[1:3, ]
## # A tibble: 3 × 6
## country year date turnout continent presidential
## <chr> <int> <date> <dbl> <fct> <lgl>
## 1 Colombia 2022 2022-05-29 55.0 America TRUE
## 2 Japan 2021 2021-10-31 56.0 Asia FALSE
## 3 Germany 2021 2021-09-26 76.6 Europe FALSE
Seleccionamos la segunda y quinta fila y de la primera a la cuarta columna.
elections[c(2,5), 1:4]
## # A tibble: 2 × 4
## country year date turnout
## <chr> <int> <date> <dbl>
## 1 Japan 2021 2021-10-31 56.0
## 2 New Zealand 2020 2020-10-17 82.2
Seleccionamos las filas con elecciones presidenciales y eliminamos la segunda y sexta columna con el símbolo negativo.
elections[elections$presidential, -c(2,6)]
## # A tibble: 2 × 4
## country date turnout continent
## <chr> <date> <dbl> <fct>
## 1 Colombia 2022-05-29 55.0 America
## 2 Chile 2021-11-21 47.3 America
En el caso de las columnas, también podemos introducir un vector con el nombre de las columnas que deseamos seleccionar.
- También podemos utilizar el vector lógico
elections$presidential
, que nos conservará las filas que sonTRUE
.
elections[elections$presidential,]
## # A tibble: 2 × 6
## country year date turnout continent presidential
## <chr> <int> <date> <dbl> <fct> <lgl>
## 1 Colombia 2022 2022-05-29 55.0 America TRUE
## 2 Chile 2021 2021-11-21 47.3 America TRUE
Cabe recordar que para guardar los cambios deberemos crear un nuevo objeto. De lo contrario, solo lo visualizamos en la consola pero no nos queda guardado en el Environment.
Los vectores lógicos son una herramienta importantísima para seleccionar (más adelante lo llamaremos ‘filtrar’) marcos de datos. ¿Por qué nos serán de tanta utilidad? Pues porque nos permiten seleccionar los casos que nos interesan de una forma muy rápida.
Por ejemplo, en el siguiente código hemos descargado una base de datos de los partidos políticos de América Latina. Pero resulta que solo nos interesan los partidos políticos brasileños. Pues podemos hacer lo siguiente:
- Descargamos la base de datos y lo convertimos en el objeto
ches_la
.
- Consultamos la lista de variables. Observamos que está el vector
country
.
glimpse(ches_la)
- Comprobamos los nombres únicos del vector
country
.
unique(ches_la$country)
## [1] "Argentina" "Bolivia" "Brasil" "Chile" "Colombia"
## [6] "Costa Rica" "Ecuador" "M\xe9xico" "Paraguay" "Per\xfa"
## [11] "Uruguay" "Venezuela"
- Efectivamente, encontramos a Brasil entre los países de los que tenemos datos. Ahora solo tenemos que crear un vector lógico que marque
TRUE
las observaciones de Brasil y situar a este vector entre corchetes.
ches_br <- ches_la[ches_la$country == "Brasil", ]
ches_br
## # A tibble: 12 × 60
## ...1 country_id country_abb country country_en party_id party_abb party
## <dbl> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 14 52 BR Brasil Brazil 5201 PT "Partido …
## 2 15 52 BR Brasil Brazil 5202 PSL "Partido …
## 3 16 52 BR Brasil Brazil 5203 PP "Partido …
## 4 17 52 BR Brasil Brazil 5204 PSD "Partido …
## 5 18 52 BR Brasil Brazil 5205 MDB "Moviment…
## 6 19 52 BR Brasil Brazil 5206 PR "Partido …
## 7 20 52 BR Brasil Brazil 5207 PS "Partido …
## 8 21 52 BR Brasil Brazil 5208 PRB "Partido …
## 9 22 52 BR Brasil Brazil 5209 PSDB "Partido …
## 10 23 52 BR Brasil Brazil 5210 DEM "Democrat…
## 11 24 52 BR Brasil Brazil 5211 PDT "Partido …
## 12 25 52 BR Brasil Brazil 5212 JB "Jair Bol…
## # ℹ 52 more variables: party_en <chr>, president <dbl>, wave <dbl>,
## # lrecon <dbl>, lrecon_blur <dbl>, lrecon_dissent <dbl>,
## # lrecon_salience <dbl>, galtan <dbl>, galtan_blur <dbl>,
## # galtan_dissent <dbl>, galtan_salience <dbl>, lrgen <dbl>, covid_ec <dbl>,
## # covid_ex <dbl>, immigrate_policy <dbl>, immigrate_salience <dbl>,
## # redistribution <dbl>, redist_salience <dbl>, environment <dbl>,
## # enviro_salience <dbl>, spendvtax <dbl>, spendvtax_salience <dbl>, …
La operación lógica ha devuelto 12 valores como TRUE. Gracias a esta operación, hemos reducido la base de datos a solo aquellos valores de la columna country
que coincidían con el valor Brasil. A la derecha de la coma, podríamos poner un vector numérico para eliminar las cinco primeras columnas que, al referirse al país, ya no nos interesan.