Logo
  • Source Code
  1. Operaciones
  2. Modificació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

  • Selección por múltiples filtros
    • Operaciones en j
  • Agregar nuevas columnas a nuestro data.table

Modificación de columnas

Durante esta sección continuaremos trabajando con el datase de especímenes de plantas que tiene registrados la plataforma GBIF (Global Biodiversity Information Facility) para México. Pero para otros ejercicios usaremos un conjunto de datos que contiene información de la Oficina de Estadísticas de Transporte para todos los vuelos que partieron de los aeropuertos de la ciudad de Nueva York en 2014 (https://raw.githubusercontent.com/Rdatatable/data.table/master/vignettes/flights14.csv).

Selección por múltiples filtros

Aquí sólo mostraremos un ejemplo de algo que se retomará en el tema 6 Por ejemplo si nos interesa seleccionar los datos de acuerdo a más de una característica podemos apoyarnos del operador &.

plants[family=="Araceae" & year==1997]
       gbifID                     occurrenceID       phylum      class       order  family     genus
        <i64>                           <char>       <char>     <char>      <char>  <char>    <char>
1: 2629021831 6973d68ba4951b05f1b767cad9c7a3bd Tracheophyta Liliopsida Alismatales Araceae   Wolffia
2: 3308025546 ada5d16106857bd7c0d8ee0bc8d90d92 Tracheophyta Liliopsida Alismatales Araceae Anthurium
3: 2629020382 18de679e2ae5d3769b04a72485ec6277 Tracheophyta Liliopsida Alismatales Araceae     Lemna
4: 1895542847 326fcc93e9a784983d7f0b40b457fb77 Tracheophyta Liliopsida Alismatales Araceae   Wolffia
                species infraspecificEpithet taxonRank             scientificName verbatimScientificName
                 <char>               <char>    <char>                     <char>                 <char>
1: Wolffia brasiliensis                        SPECIES Wolffia brasiliensis Wedd.   Wolffia brasiliensis
2:   Anthurium umbrosum                        SPECIES  Anthurium umbrosum Liebm.     Anthurium umbrosum
3: Lemna aequinoctialis                        SPECIES Lemna aequinoctialis Welw.   Lemna aequinoctialis
4: Wolffia brasiliensis                        SPECIES Wolffia brasiliensis Wedd.   Wolffia brasiliensis
   verbatimScientificNameAuthorship countryCode stateProvince decimalLatitude decimalLongitude
                             <char>      <char>        <char>           <num>            <num>
1:                      Wedd., 1849          MX       Morelos        18.53389        -99.05700
2:                     Liebm., 1850          MX        Oaxaca        17.49861        -96.35417
3:                      Welw., 1859          MX       Morelos        18.62736        -99.41153
4:                      Wedd., 1849          MX       Morelos        18.55678        -99.01744
   coordinateUncertaintyInMeters elevation   day month  year      basisOfRecord
                           <num>     <num> <int> <int> <int>             <char>
1:                            90     485.0    10    10  1997 PRESERVED_SPECIMEN
2:                            90    1790.0     8     6  1997 PRESERVED_SPECIMEN
3:                            90     517.5    11    10  1997 PRESERVED_SPECIMEN
4:                            90     587.5    26     9  1997 PRESERVED_SPECIMEN


Operaciones en j

Pero además de aplicar filtros data.table nos permite efectuar operaciones por ejemplo contar cuántas coincidencias tenemos para nuestros criterios aplicados.

plants[family=="Araceae" & year==1997, .N]
[1] 4

Es importante notar que en el primer espacio de nuestro corchete filtramos mientras en el segundo hicimos una operación. Lo que hicimos nos permite saber cuántas coincidencias hay de plantas registradas en 1997 independientemente de la especie. Existen símbolos especiales como .N que nos cuenta el número de observaciones que cumplen nuestros criterios.

Ejercicio

Pregunta: ¿Cuántos registros hay para el año 1983? (Utiliza .N)

Respuesta
plants[year==1983, .N]
[1] 2769

Además de esto podemos hacer operaciones, pero para esta parte usaremos otro dataset

flights <- fread("data/flights14.csv")

Por ejemplo si quisieramos saber el promedio de retraso de salida de los vuelos haríamos lo que sigue

flights[, mean(dep_delay)]
[1] 12.46526

Ahora calcularemos el promedio de retraso de salida para todo los vuelos que salieron del aeropuerto JFK en el mes de febrero.

flights[origin == "JFK" & month == 2L,
        .(mean_arr = mean(arr_delay))]
   mean_arr
      <num>
1: 21.18646
Ejercicio

Ahora es tu turno: Calcula el promedio de retraso de salida y entrada para todo los vuelos que salieron del aeropuerto JFK en el mes de Junio. Llama a tus nuevas columnas “mean_arr” y “mean_dep”

Respuesta
flights[origin == "JFK" & month == 6L,
        .(mean_arr = mean(arr_delay), mean_dep = mean(dep_delay))]
   mean_arr mean_dep
      <num>    <num>
1: 5.839349 9.807884

Agregar nuevas columnas a nuestro data.table

Ahora qué sucede si queremos generar una nueva columna dentro de nuestro data frame. Por ejemplo si estimamos la diferencia que hay entre los retrasos de salida y llegada

flights[, dif:=dep_delay - arr_delay]
flights
Index: <month__origin>
         year month   day dep_delay arr_delay carrier origin   dest air_time distance  hour   dif
        <int> <int> <int>     <int>     <int>  <char> <char> <char>    <int>    <int> <int> <int>
     1:  2014     1     1        14        13      AA    JFK    LAX      359     2475     9     1
     2:  2014     1     1        -3        13      AA    JFK    LAX      363     2475    11   -16
     3:  2014     1     1         2         9      AA    JFK    LAX      351     2475    19    -7
     4:  2014     1     1        -8       -26      AA    LGA    PBI      157     1035     7    18
     5:  2014     1     1         2         1      AA    JFK    LAX      350     2475    13     1
    ---                                                                                          
253312:  2014    10    31         1       -30      UA    LGA    IAH      201     1416    14    31
253313:  2014    10    31        -5       -14      UA    EWR    IAH      189     1400     8     9
253314:  2014    10    31        -8        16      MQ    LGA    RDU       83      431    11   -24
253315:  2014    10    31        -4        15      MQ    LGA    DTW       75      502    11   -19
253316:  2014    10    31        -5         1      MQ    LGA    SDF      110      659     8    -6

Sino quisiera agregarla esto es lo que se haría

flights[, .(dif = dep_delay - arr_delay)]
          dif
        <int>
     1:     1
     2:   -16
     3:    -7
     4:    18
     5:     1
    ---      
253312:    31
253313:     9
253314:   -24
253315:   -19
253316:    -6