Manipulation de données avec data.table en R
Matt Dowle and Arun Srinivasan
Instructors, DataCamp
Le premier argument i sert à sous-ensembles ou à filtrer les lignes
# Forme générale de la syntaxe data.table
DT[i, j, by]
| | |
| | --> regrouper par quoi ?
| -----> quoi faire ?
--------> sur quelles lignes ?
# Sous-ensemble : 3e et 4e lignes de batrips
batrips[3:4]
# Équivalent
batrips[3:4, ]
# Sous-ensemble : tout sauf les 5 premières lignes
batrips[-(1:5)]
# Équivalent
batrips[!(1:5)]
.N est un entier contenant le nombre de lignes de la data.tablei, en remplacement de nrow(x) nrow(batrips)
326339
batrips[326339]
trip_id duration
588914 364
# Retourne la dernière ligne
batrips[.N]
trip_id duration
588914 364
# Retourne tout sauf les 10 dernières lignes
ans <- batrips[1:(.N-10)]
nrow(ans)
326329
# Sous-ensemble : lignes où subscription_type vaut "Subscriber"
batrips[subscription_type == "Subscriber"]
# Si batrips était un simple data frame
batrips[batrips$subscription_type == "Subscriber", ]
# Sous-ensemble : start_terminal = 58 et end_terminal différent de 65
batrips[start_terminal == 58 & end_terminal != 65]
# Si batrips était un simple data frame
batrips[batrips$start_terminal == 58 & batrips$end_terminal != 65]
Optimisation automatique par indices secondaires pour accélérer
set.seed(1)
dt <- data.table(x = sample(10000, 10e6, TRUE),
y = sample(letters, 1e6, TRUE))
indices(dt)
NULL
# 0,207 s au premier appel
# (création de l'index + sous-ensemble)
system.time(dt[x == 900])
user system elapsed
0.207 0.015 0.226
indices(dt)
"x"
# 0,002 s aux appels suivants
# (sous-ensemble 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