Filtrer des lignes dans une data.table

Manipulation de données avec data.table en R

Matt Dowle and Arun Srinivasan

Instructors, DataCamp

Forme générale de la syntaxe data.table

Le premier argument i sert à sélectionner ou filtrer des lignes

# Forme générale de la syntaxe data.table
DT[i, j, by]
   |  |  |
   |  |  --> regroupé par quoi ?
   |  -----> que faire ?
   --------> sur quelles lignes ?
Manipulation de données avec data.table en R

Numéros de ligne

# Extraire les 3e et 4e lignes de batrips
batrips[3:4]

# Équivalent
batrips[3:4, ]
# Extraire tout sauf les cinq premières lignes
batrips[-(1:5)] 

# Équivalent
batrips[!(1:5)]
Manipulation de données avec data.table en R

Symbole spécial .N

  • .N est un entier contenant le nombre de lignes dans la data.table
  • Alternative pratique à nrow(x) dans i
nrow(batrips) 
326339
batrips[326339]
trip_id duration
588914      364
# Renvoie la dernière ligne
batrips[.N] 
trip_id duration
588914      364
# Renvoie tout sauf les 10 dernières lignes
ans <- batrips[1:(.N-10)] 
nrow(ans)
326329
Manipulation de données avec data.table en R

Expressions logiques (I)

# Extraire les lignes où subscription_type vaut "Subscriber"
batrips[subscription_type == "Subscriber"]

# Si batrips n'était qu'un data frame
batrips[batrips$subscription_type == "Subscriber", ]
Manipulation de données avec data.table en R

Expressions logiques (II)

# Extraire les lignes où start_terminal = 58 et end_terminal n'est pas 65
batrips[start_terminal == 58 & end_terminal != 65]

# Si batrips n'était qu'un data frame
batrips[batrips$start_terminal == 58 & batrips$end_terminal != 65]
Manipulation de données avec data.table en R

Expressions logiques (III)

Optimisé automatiquement grâce à des indices secondaires pour la vitesse

set.seed(1)
dt <- data.table(x = sample(10000, 10e6, TRUE), 
                 y = sample(letters, 1e6, TRUE))
indices(dt)
NULL
# 0,207 s au premier lancement 
# (temps de création de l'index + filtrage)
system.time(dt[x == 900])
user  system elapsed 
0.207   0.015   0.226 
indices(dt)
"x"
# 0,002 s aux exécutions suivantes
# (filtrage instantané via l'index)
system.time(dt[x == 900])
user  system elapsed 
0.002   0.000   0.002
Manipulation de données avec data.table en R

Passons à la pratique !

Manipulation de données avec data.table en R

Preparing Video For Download...