elections$country[c(1,3)]
## [1] "Colombia" "Germany"
7 Selecció d’objectes
7.1 Introducció
Normalment amb R treballarem amb marcs de dades de grans dimensions, però sovint ens pot interessar només una petita part de les dades. Per exemple, imaginem que ens descarreguem una base de dades que conté informació sobre diversos països però que només ens interessa la que està relacionada amb Espanya.
Per a aquest tipus d’operacions ens aniran molt bé els claudàtors [ ]
. Els claudàtors es posen just després de l’objecte en qüestió i ens permeten seleccionar una part de les dades d’aquest objecte. El seu funcionament és una mica diferent si els utilitzem per seleccionar elements d’un vector o elements d’un marc de dades.
objecte[ ]
7.2 Selecció de vectors
Per seleccionar els elements d’un vector, posarem els claudàtors just després del vector. A dins dels claudàtors, posarem o bé un vector numèric o bé un vector lògic indicant els valors que seleccionem:
vector[vector_numeric]
vector[vector_logic]
A continuació veiem exemples de com seleccionar parts d’un vector mitjançant un vector numèric o un vector lògic.
Posarem un vector numèric que indiqui la posició dels elements que es vol conservar. Per exemple:
- Seleccionem el primer i el tercer valor del vector
elections$country
.
- Seleccionem del segon al cinquè valor del vector
elections$country
.
elections$country[2:5]
## [1] "Japan" "Germany" "Chile" "New Zealand"
- Seleccionem tots els valors menys el tercer del vector
elections$country
amb el símbol negatiu abans del vector.
elections$country[-c(3)]
## [1] "Colombia" "Japan" "Chile" "New Zealand"
Podem posar un vector lògic d’igual longitud al vector original que indiqui amb TRUE
els elements que es vol seleccionar. Per exemple:
- Seleccionem el segon i el quart valor del vector
elections$country
.
elections$country[c(FALSE, TRUE, FALSE, TRUE, FALSE)]
## [1] "Japan" "Chile"
- Utilitzem un vector lògic ja existent per seleccionar els elements que volem. En aquest cas, seleccionem els països de
elections$country
que tenen eleccions presidencials amb el vectorelections$presidential
.
elections$country[elections$presidential]
## [1] "Colombia" "Chile"
Vegeu més avall el subapartat El poder dels vectors lògics per saber-ne més sobre com utilitzar vectors lògics per seleccionar elements d’objectes.
7.3 Selecció de marcs de dades
Per seleccionar els elements d’un marc de dades, posarem els claudàtors just després del marc de dades. A dins dels claudàtors hi situarem una coma:
- A l’esquerra de la coma hi indicarem les files amb un vector numèric o lògic.
- A la dreta de la coma hi indicarem les columnes amb un vector numèric o de caràcter.
- Si a un costat de la coma no donem cap indicació, ens retornarà totes les files o totes les columnes segons correspongui.
marcdades[files,columnes]
Vegem alguns exemples, utilitzant el marc de dades elections
:
Seleccionem de la primera a la tercera fila, deixem les columnes en blanc.
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
Seleccionem la segona i la cinquena fila i de la primera a la quarta 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
Seleccionem les files que tenen eleccions presidencials i eliminem la segona i sisena columna amb el símbol negatiu.
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 cas de les columnes, també podem introduir un vector amb el nom de les columnes que volem seleccionar.
- També podem utilitzar el vector lògic
elections$presidential
, que ens conservarà les files que sónTRUE
.
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
Cal recordar que per guardar els canvis haurem de crear un nou objecte. En cas contrari, només ho visualitzem a la consola però no ens queda guardat a l’Environment.
Els vectors lògics són una eina importantíssima per seleccionar (més endavant en direm ‘filtrar’) marcs de dades. Per què ens seran de tanta utilitat? Doncs perquè ens permeten seleccionar els casos que ens interessen d’una manera molt ràpida.
Per exemple, en el següent codi hem descarregat una base de dades dels partits polítics d’Amèrica Llatina. Però resulta que només ens interessen els partits polítics brasilers. Doncs podem fer el següent:
- Descarreguem la base de dades i el convertim en l’objecte
ches_la
.
- Consultem la llista de variables. Observem que hi ha el vector
country
.
glimpse(ches_la)
- Comprovem els noms únics 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"
- Efectivament, trobem Brasil entre els països dels quals tenim dades. Ara només hem de crear un vector lògic que marqui
TRUE
les observacions de Brasil i situar aquest vector entre claudàtors.
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>, …
L’operació lògica ha retornat 12 valors com a TRUE. Gràcies a aquesta operació, hem reduït la base de dades a només aquells valors de la columna country
que coincidien amb el valor Brasil. A la dreta de la coma, podríem posar-hi un vector numèric per eliminar les cinc primeres columnes que, com que fan referència al país, ja no ens interessen.