Logo
  • Source Code
  1. Operaciones
  2. Filtros y selección de columnas
  • Introducción
    • Introducción y recursos
    • Sintaxis básica
    • Importar y exportar datos
  • Operaciones
    • Filtros y selección de columnas
    • Modificación de columnas
    • Agrupación
    • Cadenas de operaciones
    • Uniones entre tablas

On this page

  • Operaciones sobre las filas
    • Seleccionar por índices
    • Filtrar filas
    • Ordenar filas
  • Operaciones sobre las columnas
    • Seleccionar columnas por índice
    • Seleccionar columnas por nombre
    • Renombrar columnas

Filtros y selección de columnas

Operaciones sobre las filas

Seleccionar por índices

Similar a como se seleccionan filas en un data.frame, en un objeto data.table se pueden seleccionar filas utilizando rangos de índices. En los siguientes dos ejemplos se muestra como seleccionar las primeras dos filas de la tabla de registros.

library(data.table)


data = fread("data/plantae_mexico_conCoords_specimen.csv")
data[1:2] 
       gbifID                 occurrenceID       phylum          class        order      family       genus
        <i64>                       <char>       <char>         <char>       <char>      <char>      <char>
1: 2825623524 TAIF:PLANT:318128:1:1:411555 Tracheophyta Polypodiopsida Polypodiales Pteridaceae    Adiantum
2: 2825649445 TAIF:PLANT:318579:1:1:411579 Tracheophyta Polypodiopsida Polypodiales Pteridaceae Scoliosorus
                  species infraspecificEpithet taxonRank                         scientificName
                   <char>               <char>    <char>                                 <char>
1:      Adiantum andicola                        SPECIES               Adiantum andicola Liebm.
2: Scoliosorus ensiformis                        SPECIES Scoliosorus ensiformis (Hook.) T.Moore
                    verbatimScientificName verbatimScientificNameAuthorship countryCode     stateProvince
                                    <char>                           <lgcl>      <char>            <char>
1:                Adiantum andicola Liebm.                               NA          MX Oaxaca (瓦哈卡州)
2: Scoliosorus ensiformis (Hook.) T. Moore                               NA          MX Oaxaca (瓦哈卡州)
   decimalLatitude decimalLongitude coordinateUncertaintyInMeters elevation   day month  year      basisOfRecord
             <num>            <num>                        <lgcl>     <int> <int> <int> <int>             <char>
1:        17.30213         -96.3808                            NA      2267    27     2  2012 PRESERVED_SPECIMEN
2:        17.30213         -96.3808                            NA      2267    27     2  2012 PRESERVED_SPECIMEN


Nota: Cuando solo estamos seleccionando filas no es necesario incluir la coma al final.

data[1:2,] 
       gbifID                 occurrenceID       phylum          class        order      family       genus
        <i64>                       <char>       <char>         <char>       <char>      <char>      <char>
1: 2825623524 TAIF:PLANT:318128:1:1:411555 Tracheophyta Polypodiopsida Polypodiales Pteridaceae    Adiantum
2: 2825649445 TAIF:PLANT:318579:1:1:411579 Tracheophyta Polypodiopsida Polypodiales Pteridaceae Scoliosorus
                  species infraspecificEpithet taxonRank                         scientificName
                   <char>               <char>    <char>                                 <char>
1:      Adiantum andicola                        SPECIES               Adiantum andicola Liebm.
2: Scoliosorus ensiformis                        SPECIES Scoliosorus ensiformis (Hook.) T.Moore
                    verbatimScientificName verbatimScientificNameAuthorship countryCode     stateProvince
                                    <char>                           <lgcl>      <char>            <char>
1:                Adiantum andicola Liebm.                               NA          MX Oaxaca (瓦哈卡州)
2: Scoliosorus ensiformis (Hook.) T. Moore                               NA          MX Oaxaca (瓦哈卡州)
   decimalLatitude decimalLongitude coordinateUncertaintyInMeters elevation   day month  year      basisOfRecord
             <num>            <num>                        <lgcl>     <int> <int> <int> <int>             <char>
1:        17.30213         -96.3808                            NA      2267    27     2  2012 PRESERVED_SPECIMEN
2:        17.30213         -96.3808                            NA      2267    27     2  2012 PRESERVED_SPECIMEN


Filtrar filas

De acuerdo con la sintaxis del paquete, el espacio i es el lugar en el que se pueden realizar operaciones sobre las filas como los filtros. Por ejemplo, utilizando la tabla de registros de especies de plantas podríamos estar interesados en solo seleccionar aquellos registros que pertenezcan al género Quercus.

data_quercus <- data[genus == "Quercus",] 

dim(data_quercus)
[1] 51985    23

O podríamos estar interesadas en seleccionar solo los registros más viejos, los que fueron colectados antes de 1950.

data_quercus_viejos <- data[genus == "Quercus" & year <= 1950,]

dim(data_quercus_viejos)
[1] 2927   23


Ordenar filas

Otra función que se puede realizar en el espacio de las filas es ordenarlas. Por ejemplo, podríamos ordenar la tabla de registros del género Quercus por estado en orden alfabético.

# Ordenar los datos de la tabla de registros de Quercus por estado en orden alfabetico

ordered_data = data_quercus[order(stateProvince)]

# seleccionar la columna de estado como vector y seleccionar los valores únicos
# mostrar solo los primeros valores

unique(ordered_data$stateProvince) |> head()
[1] ""                        "Aguascalientes"          "Baja California"         "Baja California (norte)"
[5] "Baja California Norte"   "Baja California Sur"    
Reto
  1. Carga el archivo de registros de plantas utilizando la función fread que revisamos en el tema anterior
  2. Utiliza un filtro para quedarte con las filas que pertenezcan a un género o especie que te guste
  3. Ordena de manera descendente por año

Pregunta:

¿De qué año son los registros más nuevos y más viejos de la especie que escogiste? (selecciona utilizando rangos la primera y la última fila de la tabla)

Respuesta
library(data.table)

data = fread("data/plantae_mexico_conCoords_specimen.csv", quote="")

data_quercus <- data[genus == "Quercus" & !is.na(year),] 

data_quercus_ordenado <- data_quercus[order(-year)] 

# Una función útil en el paquete es la función .N que te permite guardar el número de observaciones en el grupo actual. En este caso solo tenemos un solo grupo y por lo tanto guarda el número de filas en la tabla.

data_quercus_ordenado[c(1, nrow(data_quercus_ordenado)),]$year
[1] 2023 1827



Operaciones sobre las columnas

Seleccionar columnas por índice

De acuerdo con la sintaxis del paquete, el espacio j nos permite realizar operaciones sobre las columnas. Una de esas operaciones es la selección de columnas.

Se pueden seleccionar por medio de índices:

data[,7:8,]
               genus               species
              <char>                <char>
     1:    Syngonium  Syngonium angustatum
     2:     Scaevola     Scaevola plumieri
     3:   Tillandsia    Tillandsia fuchsii
     4:    Commelina     Commelina rufipes
     5: Heterosperma Heterosperma pinnatum
    ---                                   
 99996:   Polypodium                      
 99997: Hesperoyucca Hesperoyucca whipplei
 99998: Fimbristylis   Fimbristylis cymosa
 99999:    Commelina    Commelina tuberosa
100000:       Salvia    Salvia polystachia

Seleccionar columnas por nombre

Se pueden seleccionar las columas por nombre y regresar como vector:

data[,species] |> head()
[1] "Syngonium angustatum"  "Scaevola plumieri"     "Tillandsia fuchsii"    "Commelina rufipes"    
[5] "Heterosperma pinnatum" "Begonia crassicaulis" 

Se pueden seleccionar las columnas usando una lista y regresar como tabla:

data[,list(family,genus,species)]
               family        genus               species
               <char>       <char>                <char>
     1:       Araceae    Syngonium  Syngonium angustatum
     2:  Goodeniaceae     Scaevola     Scaevola plumieri
     3:  Bromeliaceae   Tillandsia    Tillandsia fuchsii
     4: Commelinaceae    Commelina     Commelina rufipes
     5:    Asteraceae Heterosperma Heterosperma pinnatum
    ---                                                 
 99996: Polypodiaceae   Polypodium                      
 99997:  Asparagaceae Hesperoyucca Hesperoyucca whipplei
 99998:    Cyperaceae Fimbristylis   Fimbristylis cymosa
 99999: Commelinaceae    Commelina    Commelina tuberosa
100000:     Lamiaceae       Salvia    Salvia polystachia

Un atajo para no escribir list() es .():

data[,.(family,genus,species)]
               family        genus               species
               <char>       <char>                <char>
     1:       Araceae    Syngonium  Syngonium angustatum
     2:  Goodeniaceae     Scaevola     Scaevola plumieri
     3:  Bromeliaceae   Tillandsia    Tillandsia fuchsii
     4: Commelinaceae    Commelina     Commelina rufipes
     5:    Asteraceae Heterosperma Heterosperma pinnatum
    ---                                                 
 99996: Polypodiaceae   Polypodium                      
 99997:  Asparagaceae Hesperoyucca Hesperoyucca whipplei
 99998:    Cyperaceae Fimbristylis   Fimbristylis cymosa
 99999: Commelinaceae    Commelina    Commelina tuberosa
100000:     Lamiaceae       Salvia    Salvia polystachia

Para seleccionar columnas guardadas en una variable se puede utilizar el prefijo ..:

variables <- c("family","genus","species")

data[ , ..variables]
               family        genus               species
               <char>       <char>                <char>
     1:       Araceae    Syngonium  Syngonium angustatum
     2:  Goodeniaceae     Scaevola     Scaevola plumieri
     3:  Bromeliaceae   Tillandsia    Tillandsia fuchsii
     4: Commelinaceae    Commelina     Commelina rufipes
     5:    Asteraceae Heterosperma Heterosperma pinnatum
    ---                                                 
 99996: Polypodiaceae   Polypodium                      
 99997:  Asparagaceae Hesperoyucca Hesperoyucca whipplei
 99998:    Cyperaceae Fimbristylis   Fimbristylis cymosa
 99999: Commelinaceae    Commelina    Commelina tuberosa
100000:     Lamiaceae       Salvia    Salvia polystachia
Reto
  1. Selecciona las columnas que contengan información acerca de la ubicación geográfica de los registros.
Respuesta

info_geografica <- c(“countryCode”, “stateProvince”, “decimalLatitude”, “decimalLongitude”, “coordinateUncertaintyInMeters”, “elevation”)

vars_info_geografica <- c("countryCode", "stateProvince", "decimalLatitude", "decimalLongitude", "coordinateUncertaintyInMeters", "elevation")

data[,..vars_info_geografica,]
        countryCode                   stateProvince decimalLatitude decimalLongitude coordinateUncertaintyInMeters
             <char>                          <char>           <num>            <num>                         <num>
     1:          MX                        Veracruz        19.33330        -96.66670                            NA
     2:          MX                         Yucatan        21.25417        -89.80833                            70
     3:          MX                         Chiapas        15.65000        -92.80000                           100
     4:          MX                         Chiapas        16.08111        -93.47805                           100
     5:          MX                         Durango        25.54389       -104.59100                            50
    ---                                                                                                           
 99996:          MX                          Mexico        20.00583       -100.13200                            80
 99997:          MX                 Baja California        32.35806       -116.93146                         10000
 99998:          MX Veracruz de ignacio de la llave        20.20833        -96.79167                            80
 99999:          MX             Michoacan de ocampo        19.76222       -100.86611                            80
100000:          MX                        Guerrero        17.46814       -100.13643                         10490
        elevation
            <num>
     1:        NA
     2:       0.0
     3:    1400.0
     4:     473.5
     5:    1900.0
    ---          
 99996:    2400.0
 99997:        NA
 99998:        NA
 99999:    1020.0
100000:    1300.0

Renombrar columnas

En el espacio de operaciones sobre las columnas también se pueden renombrar las columnas.

data[, .(especie = species, genero = genus)]
                      especie       genero
                       <char>       <char>
     1:  Syngonium angustatum    Syngonium
     2:     Scaevola plumieri     Scaevola
     3:    Tillandsia fuchsii   Tillandsia
     4:     Commelina rufipes    Commelina
     5: Heterosperma pinnatum Heterosperma
    ---                                   
 99996:                         Polypodium
 99997: Hesperoyucca whipplei Hesperoyucca
 99998:   Fimbristylis cymosa Fimbristylis
 99999:    Commelina tuberosa    Commelina
100000:    Salvia polystachia       Salvia