data.table
Créer un data.table
Recherche…
Remarques
Un data.table est une version améliorée de la classe data.frame de la base R. En tant que tel, son attribut class()
est le vecteur "data.table" "data.frame"
et les fonctions qui fonctionnent sur un data.frame seront également travailler avec un data.table. Il existe de nombreuses manières de créer, charger ou contraindre à une data.table, comme on le voit ici.
Contraindre un data.frame
Pour copier un data.frame en tant que data.table, utilisez as.data.table
ou data.table
:
DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)
DT <- as.data.table(DF)
# or
DT <- data.table(DF)
Ceci est rarement nécessaire. Une exception est l'utilisation de jeux de données mtcars
tels que mtcars
, qui doivent être copiés car ils ne peuvent pas être modifiés sur place.
Construire avec data.table ()
Il y a un constructeur du même nom:
DT <- data.table(
x = letters[1:5],
y = 1:5,
z = (1:5) > 3
)
# x y z
# 1: a 1 FALSE
# 2: b 2 FALSE
# 3: c 3 FALSE
# 4: d 4 TRUE
# 5: e 5 TRUE
Contrairement à data.frame
, data.table
ne contraindra pas les chaînes aux facteurs par défaut:
sapply(DT, class)
# x y z
# "character" "integer" "logical"
Lire avec fread ()
Nous pouvons lire un fichier texte:
dt <- fread("my_file.csv")
Contrairement à read.csv
, fread
lira les chaînes comme des chaînes, et non comme des facteurs par défaut.
Voir le [topic on fread
] [need_a_link] pour plus d'exemples.
Modifier un data.frame avec setDT ()
Pour plus d'efficacité, data.table offre un moyen de modifier un data.frame ou une liste pour créer un data.table sur place:
# example data.frame
DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)
# modification
setDT(DF)
Notez que nous ne <-
assignons pas le résultat, puisque l'objet DF
a été modifié sur place.
Les attributs de classe du data.frame seront conservés:
sapply(DF, class)
# x y z
# "factor" "integer" "logical"
Copier un autre data.table avec copy ()
# example data
DT1 = data.table(x = letters[1:2], y = 1:2, z = (1:2) > 3)
En raison de la manière dont les data.tables sont manipulées, DT2 <- DT1
ne fera pas de copie. Autrement dit, les modifications ultérieures apportées aux colonnes ou à d'autres attributs de DT2
affecteront également DT1
. Lorsque vous voulez une copie réelle, utilisez
DT2 = copy(DT1)
Pour voir la différence, voici ce qui se passe sans copie:
DT2 <- DT1
DT2[, w := 1:2]
DT1
# x y z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2
DT2
# x y z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2
Et avec une copie:
DT2 <- copy(DT1)
DT2[, w := 1:2]
DT1
# x y z
# 1: a 1 FALSE
# 2: b 2 FALSE
DT2
# x y z w
# 1: a 1 FALSE 1
# 2: b 2 FALSE 2
Les modifications ne se propagent donc pas dans ce dernier cas.