• 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 y cadenas de operaciones
    • Uniones entre tablas
    • Reformatear tablas
    • .SD()
    • Ejercicios

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
    • Deseleccionar columas
    • 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/universal_top_spotify_songs.csv")
data[1:2,] 
               spotify_id               name               artists daily_rank daily_movement weekly_movement country
                   <char>             <char>                <char>      <int>          <int>           <int>  <char>
1: 2plbrEY59IikOBgBGLjaoe   Die With A Smile Lady Gaga, Bruno Mars          1              0               0        
2: 6dOtVTDdiauQNBQEDOtlAB BIRDS OF A FEATHER         Billie Eilish          2              0               0        
   snapshot_date popularity is_explicit duration_ms           album_name album_release_date danceability energy   key
          <IDat>      <int>      <lgcl>       <int>               <char>             <IDat>        <num>  <num> <int>
1:    2024-09-08         97       FALSE      251667     Die With A Smile         2024-08-16        0.521  0.592     6
2:    2024-09-08        100       FALSE      210373 HIT ME HARD AND SOFT         2024-05-17        0.747  0.507     2
   loudness  mode speechiness acousticness instrumentalness liveness valence   tempo time_signature
      <num> <int>       <num>        <num>            <num>    <num>   <num>   <num>          <int>
1:   -7.777     0      0.0304        0.308           0.0000    0.122   0.535 157.969              3
2:  -10.171     1      0.0358        0.200           0.0608    0.117   0.438 104.978              4


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

data[1:2] 
               spotify_id               name               artists daily_rank daily_movement weekly_movement country
                   <char>             <char>                <char>      <int>          <int>           <int>  <char>
1: 2plbrEY59IikOBgBGLjaoe   Die With A Smile Lady Gaga, Bruno Mars          1              0               0        
2: 6dOtVTDdiauQNBQEDOtlAB BIRDS OF A FEATHER         Billie Eilish          2              0               0        
   snapshot_date popularity is_explicit duration_ms           album_name album_release_date danceability energy   key
          <IDat>      <int>      <lgcl>       <int>               <char>             <IDat>        <num>  <num> <int>
1:    2024-09-08         97       FALSE      251667     Die With A Smile         2024-08-16        0.521  0.592     6
2:    2024-09-08        100       FALSE      210373 HIT ME HARD AND SOFT         2024-05-17        0.747  0.507     2
   loudness  mode speechiness acousticness instrumentalness liveness valence   tempo time_signature
      <num> <int>       <num>        <num>            <num>    <num>   <num>   <num>          <int>
1:   -7.777     0      0.0304        0.308           0.0000    0.122   0.535 157.969              3
2:  -10.171     1      0.0358        0.200           0.0608    0.117   0.438 104.978              4


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 canciones podríamos estar interesados en solo seleccionar aquellos registros que pertenezcan a México.

data_MX <- data[country == "MX",] 

dim(data_MX)
[1] 16256    25

O podríamos estar interesadas en seleccionar solo los registros más viejos, los que fueron publicados antes del 2000.

data_MX_viejos <- data[country == "MX" & album_release_date <= 2000,]

dim(data_MX_viejos)
[1]  2 25

Operadores lógicos para hacer los filtros:

Operador Comparación Ejemplo Resultado
x | y x Ó y es verdadero TRUE | FALSE TRUE
x & y x Y y son verdaderos TRUE & FALSE FALSE
!x x no es verdadero (negación) !TRUE FALSE
isTRUE(x) x es verdadero (afirmación) isTRUE(TRUE) TRUE


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 canciones de México por qué tan bailable es.

# Ordenar los datos de la tabla por qué tan bailable es

ordered_data_MX = data_MX[order(danceability, decreasing = T)]

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

unique(ordered_data_MX$danceability) |> head()
[1] 0.937 0.924 0.922 0.920 0.918 0.913
Reto
  1. Carga el archivo de canciones utilizando la función fread que revisamos en el tema anterior
  2. Utiliza un filtro para quedarte con las filas que pertenezcan al pais que te interese
  3. Ordena de manera descendente por ranking

Pregunta:

¿De qué rango de años son las 50 canciones más escuchadas?

Nota: Cuando tienes una columna de fecha con formato Año-mes-dia pero solo quieres la información de alguno de los elementos (por ejemplo el año) puedes utilizar la siguiente función: format(data_MX_ordenado$album_release_date,"%Y")

Respuesta
[1] "Mexico: 1963 - 2024"



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[,c(2,3,7),]
                                      name                     artists country
                                    <char>                      <char>  <char>
      1:                  Die With A Smile       Lady Gaga, Bruno Mars        
      2:                BIRDS OF A FEATHER               Billie Eilish        
      3:                             Taste           Sabrina Carpenter        
      4:                          Espresso           Sabrina Carpenter        
      5:                               Who                       Jimin        
     ---                                                                      
1179449:         Slime You Out (feat. SZA)                  Drake, SZA      AE
1179450: SAY MY GRACE (feat. Travis Scott)        Offset, Travis Scott      AE
1179451:                            People                    Libianca      AE
1179452:                        Rainy Days                           V      AE
1179453:                             Prada cassö, RAYE, D-Block Europe      AE

Seleccionar columnas por nombre

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

data[,name] |> head()
[1] "Die With A Smile"             "BIRDS OF A FEATHER"           "Taste"                       
[4] "Espresso"                     "Who"                          "Si Antes Te Hubiera Conocido"

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

data[,list(artists,name,album_name)]
                             artists                              name           album_name
                              <char>                            <char>               <char>
      1:       Lady Gaga, Bruno Mars                  Die With A Smile     Die With A Smile
      2:               Billie Eilish                BIRDS OF A FEATHER HIT ME HARD AND SOFT
      3:           Sabrina Carpenter                             Taste       Short n' Sweet
      4:           Sabrina Carpenter                          Espresso       Short n' Sweet
      5:                       Jimin                               Who                 MUSE
     ---                                                                                   
1179449:                  Drake, SZA         Slime You Out (feat. SZA)     For All The Dogs
1179450:        Offset, Travis Scott SAY MY GRACE (feat. Travis Scott)           SET IT OFF
1179451:                    Libianca                            People               People
1179452:                           V                        Rainy Days              Layover
1179453: cassö, RAYE, D-Block Europe                             Prada                Prada

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

data[,.(artists,name,album_name)]
                             artists                              name           album_name
                              <char>                            <char>               <char>
      1:       Lady Gaga, Bruno Mars                  Die With A Smile     Die With A Smile
      2:               Billie Eilish                BIRDS OF A FEATHER HIT ME HARD AND SOFT
      3:           Sabrina Carpenter                             Taste       Short n' Sweet
      4:           Sabrina Carpenter                          Espresso       Short n' Sweet
      5:                       Jimin                               Who                 MUSE
     ---                                                                                   
1179449:                  Drake, SZA         Slime You Out (feat. SZA)     For All The Dogs
1179450:        Offset, Travis Scott SAY MY GRACE (feat. Travis Scott)           SET IT OFF
1179451:                    Libianca                            People               People
1179452:                           V                        Rainy Days              Layover
1179453: cassö, RAYE, D-Block Europe                             Prada                Prada

Seleccionar columnas por rangos usando nombres:

data[,spotify_id:weekly_movement]
                     spotify_id                              name                     artists daily_rank daily_movement
                         <char>                            <char>                      <char>      <int>          <int>
      1: 2plbrEY59IikOBgBGLjaoe                  Die With A Smile       Lady Gaga, Bruno Mars          1              0
      2: 6dOtVTDdiauQNBQEDOtlAB                BIRDS OF A FEATHER               Billie Eilish          2              0
      3: 5G2f63n7IPVPPjfNIGih7Q                             Taste           Sabrina Carpenter          3              0
      4: 2HRqTpkrJO5ggZyyK6NPWz                          Espresso           Sabrina Carpenter          4             46
      5: 7tI8dRuH2Yc6RuoTjxo4dU                               Who                       Jimin          5              0
     ---                                                                                                               
1179449: 0AYt6NMyyLd0rLuvr0UkMH         Slime You Out (feat. SZA)                  Drake, SZA         46              4
1179450: 2Gk6fi0dqt91NKvlzGsmm7 SAY MY GRACE (feat. Travis Scott)        Offset, Travis Scott         47              3
1179451: 26b3oVLrRUaaybJulow9kz                            People                    Libianca         48              2
1179452: 5ydjxBSUIDn26MFzU3asP4                        Rainy Days                           V         49              1
1179453: 59NraMJsLaMCVtwXTSia8i                             Prada cassö, RAYE, D-Block Europe         50              0
         weekly_movement
                   <int>
      1:               0
      2:               0
      3:               0
      4:              46
      5:               0
     ---                
1179449:               0
1179450:               0
1179451:               0
1179452:               0
1179453:               0

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

variables <- c("artists","name","album_name")

data[ , ..variables]
                             artists                              name           album_name
                              <char>                            <char>               <char>
      1:       Lady Gaga, Bruno Mars                  Die With A Smile     Die With A Smile
      2:               Billie Eilish                BIRDS OF A FEATHER HIT ME HARD AND SOFT
      3:           Sabrina Carpenter                             Taste       Short n' Sweet
      4:           Sabrina Carpenter                          Espresso       Short n' Sweet
      5:                       Jimin                               Who                 MUSE
     ---                                                                                   
1179449:                  Drake, SZA         Slime You Out (feat. SZA)     For All The Dogs
1179450:        Offset, Travis Scott SAY MY GRACE (feat. Travis Scott)           SET IT OFF
1179451:                    Libianca                            People               People
1179452:                           V                        Rainy Days              Layover
1179453: cassö, RAYE, D-Block Europe                             Prada                Prada

Nota: Tanto los objetos data.frame como los data.table son listas (aun cuando las vemos como tablas). El hecho de que las operaciones realizadas en el espacio j regresen listas es muy poderoso y permite hacer operaciones más complicadas más adelante.

Reto

A. Me gustaría tener un data frame en donde solo tuviera la información de las características de las canciones (por ejemplo: duración, energía, etc.)

  1. Enlista los nombres de columnas y analiza de qué tratan
  2. Guarda los nombres de las columnas que solo contengan información acerca las características en un objeto
  3. Selecciona las columnas de la tabla data usando el objeto de nombres de columnas.

B. Genera un objeto data.table que tenga los registros del mes de septiembre 2024 y las columnas que describen las características de las cancions (utiliza un solo comando).

Nota: Cuando tienes una columna de fecha con formato Año-mes-dia pero solo quieres la información de algunos de los elementos (por ejemplo el año y mes) puedes utilizar la siguiente función: format(data_MX_ordenado$album_release_date,"%Y-%m")

Respuesta

info_canciones <- c(“duration_ms”, “danceability”, “energy”, “loudness”, “speechiness”, “acousticness”,“instrumentalness”,“liveness”)

         duration_ms danceability energy loudness speechiness acousticness instrumentalness liveness
               <int>        <num>  <num>    <num>       <num>        <num>            <num>    <num>
      1:      251667        0.521  0.592   -7.777      0.0304      0.30800         0.00e+00    0.122
      2:      210373        0.747  0.507  -10.171      0.0358      0.20000         6.08e-02    0.117
      3:      157279        0.674  0.907   -4.086      0.0640      0.10100         0.00e+00    0.297
      4:      175459        0.699  0.776   -5.282      0.0293      0.13100         5.36e-06    0.205
      5:      170887        0.660  0.756   -3.743      0.0320      0.00289         0.00e+00    0.193
     ---                                                                                            
1179449:      310490        0.483  0.408   -9.243      0.0502      0.50800         0.00e+00    0.259
1179450:      173253        0.773  0.635   -5.060      0.0452      0.05850         0.00e+00    0.132
1179451:      184791        0.573  0.422   -7.621      0.0678      0.55100         1.31e-05    0.102
1179452:      179560        0.633  0.454   -8.016      0.0875      0.73900         0.00e+00    0.148
1179453:      132359        0.638  0.717   -5.804      0.0375      0.00100         1.79e-06    0.113
       snapshot_date duration_ms danceability energy loudness speechiness acousticness instrumentalness liveness
              <IDat>       <int>        <num>  <num>    <num>       <num>        <num>            <num>    <num>
    1:    2024-09-08      251667        0.521  0.592   -7.777      0.0304      0.30800         0.00e+00   0.1220
    2:    2024-09-08      210373        0.747  0.507  -10.171      0.0358      0.20000         6.08e-02   0.1170
    3:    2024-09-08      157279        0.674  0.907   -4.086      0.0640      0.10100         0.00e+00   0.2970
    4:    2024-09-08      175459        0.699  0.776   -5.282      0.0293      0.13100         5.36e-06   0.2050
    5:    2024-09-08      170887        0.660  0.756   -3.743      0.0320      0.00289         0.00e+00   0.1930
   ---                                                                                                          
29196:    2024-09-01      140733        0.882  0.764   -5.241      0.2040      0.35900         0.00e+00   0.1190
29197:    2024-09-01      180000        0.840  0.715   -5.141      0.1870      0.17600         0.00e+00   0.0935
29198:    2024-09-01      241000        0.330  0.313  -10.906      0.0353      0.53600         5.70e-06   0.2770
29199:    2024-09-01      131872        0.749  0.729   -3.190      0.0321      0.26100         0.00e+00   0.1130
29200:    2024-09-01      151739        0.804  0.957   -5.452      0.0340      0.12500         1.74e-02   0.1140

Deseleccionar columas

Similar a las formas de seleccionar columnas podemos utilizar los operadores - y ! para evitar la selección de ciertas columnas o rangos de columnas.

data[,-c("name","artists")] %>% colnames()
 [1] "spotify_id"         "daily_rank"         "daily_movement"     "weekly_movement"    "country"           
 [6] "snapshot_date"      "popularity"         "is_explicit"        "duration_ms"        "album_name"        
[11] "album_release_date" "danceability"       "energy"             "key"                "loudness"          
[16] "mode"               "speechiness"        "acousticness"       "instrumentalness"   "liveness"          
[21] "valence"            "tempo"              "time_signature"    
data[,!c("spotify_id")] %>% colnames()
 [1] "name"               "artists"            "daily_rank"         "daily_movement"     "weekly_movement"   
 [6] "country"            "snapshot_date"      "popularity"         "is_explicit"        "duration_ms"       
[11] "album_name"         "album_release_date" "danceability"       "energy"             "key"               
[16] "loudness"           "mode"               "speechiness"        "acousticness"       "instrumentalness"  
[21] "liveness"           "valence"            "tempo"              "time_signature"    
data[,!(key:time_signature)] %>% colnames()
 [1] "spotify_id"         "name"               "artists"            "daily_rank"         "daily_movement"    
 [6] "weekly_movement"    "country"            "snapshot_date"      "popularity"         "is_explicit"       
[11] "duration_ms"        "album_name"         "album_release_date" "danceability"       "energy"            

Renombrar columnas

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

data[, .(artista = artists, song_name = name)]
                             artista                         song_name
                              <char>                            <char>
      1:       Lady Gaga, Bruno Mars                  Die With A Smile
      2:               Billie Eilish                BIRDS OF A FEATHER
      3:           Sabrina Carpenter                             Taste
      4:           Sabrina Carpenter                          Espresso
      5:                       Jimin                               Who
     ---                                                              
1179449:                  Drake, SZA         Slime You Out (feat. SZA)
1179450:        Offset, Travis Scott SAY MY GRACE (feat. Travis Scott)
1179451:                    Libianca                            People
1179452:                           V                        Rainy Days
1179453: cassö, RAYE, D-Block Europe                             Prada