data.table
Een data.table maken
Zoeken…
Opmerkingen
Een data.table is een verbeterde versie van de data.frame-klasse van base R. Als zodanig is het kenmerk class()
de vector "data.table" "data.frame"
en functies die op een data.frame werken, zullen ook werken met een data.table. Er zijn veel manieren om een data.table te maken, laden of dwingen, zoals hier te zien.
Coerce een data.frame
Gebruik as.data.table
of data.table
om een data.frame te kopiëren als 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)
Dit is zelden nodig. Een uitzondering is het gebruik van ingebouwde gegevenssets zoals mtcars
, die moeten worden gekopieerd, omdat ze niet ter mtcars
kunnen worden gewijzigd.
Bouwen met data.table ()
Er is een constructor met dezelfde naam:
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
In tegenstelling tot data.frame
, zal data.frame
data.table
geen tekenreeksen naar factoren dwingen:
sapply(DT, class)
# x y z
# "character" "integer" "logical"
Inlezen met fread ()
We kunnen lezen uit een tekstbestand:
dt <- fread("my_file.csv")
In tegenstelling tot read.csv
leest fread
strings als strings, niet standaard als factoren.
Zie het [topic on fread
] [need_a_link] voor meer voorbeelden.
Wijzig een data.frame met setDT ()
Voor efficiëntie biedt data.table een manier om een data.frame of lijst te wijzigen om een data.table op zijn plaats te krijgen:
# example data.frame
DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)
# modification
setDT(DF)
Merk op dat we niet <-
het resultaat toewijzen, omdat het object DF
is gewijzigd.
De klassenattributen van het data.frame blijven behouden:
sapply(DF, class)
# x y z
# "factor" "integer" "logical"
Kopieer een andere data.table met copy ()
# example data
DT1 = data.table(x = letters[1:2], y = 1:2, z = (1:2) > 3)
Vanwege de manier waarop data.tables worden gemanipuleerd, maakt DT2 <- DT1
geen kopie. Dat wil zeggen dat latere wijzigingen in de kolommen of andere kenmerken van DT2
ook van invloed zijn op DT1
. Gebruik als u een echt exemplaar wilt
DT2 = copy(DT1)
Om het verschil te zien, hier is wat er gebeurt zonder een kopie:
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
En met een kopie:
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
De wijzigingen worden dus niet doorgegeven in het laatste geval.