data.table
Skapa en data.table
Sök…
Anmärkningar
En data.table är en förbättrad version av klassen data.frame från bas R. Som sådan är attributet class()
vektorn "data.table" "data.frame"
och funktioner som fungerar på en data.frame kommer också arbeta med en data.table. Det finns många sätt att skapa, ladda eller tvinga till en data.tabell, som det ses här.
Tvinga en data.frame
För att kopiera en data.frame som en data.table, använd as.data.table
eller 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)
Detta är sällan nödvändigt. Ett undantag är när man använder inbyggda mtcars
som mtcars
, som måste kopieras eftersom de inte kan modifieras på plats.
Bygg med data.table ()
Det finns en konstruktör med samma namn:
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
Till skillnad data.frame
data.table
kommer data.table
inte att tvinga strängar till faktorer som standard:
sapply(DT, class)
# x y z
# "character" "integer" "logical"
Läs in med fread ()
Vi kan läsa från en textfil:
dt <- fread("my_file.csv")
Till skillnad read.csv
fread
kommer fread
att läsa strängar som strängar, inte som faktorer som standard.
Se [ämnet på fread
] [need_a_link] för fler exempel.
Ändra en data.frame med setDT ()
För effektivitet erbjuder data.table ett sätt att ändra en data.frame eller en lista för att göra en data.table på plats:
# example data.frame
DF = data.frame(x = letters[1:5], y = 1:5, z = (1:5) > 3)
# modification
setDT(DF)
Observera att vi inte <-
tilldelar resultatet, eftersom objektet DF
har modifierats på plats.
Klassattributen för data.frame behålls:
sapply(DF, class)
# x y z
# "factor" "integer" "logical"
Kopiera en annan data.tabell med kopia ()
# example data
DT1 = data.table(x = letters[1:2], y = 1:2, z = (1:2) > 3)
På grund av hur data.tabeller manipuleras kommer DT2 <- DT1
inte att kopiera. Det vill säga att senare ändringar av kolumnerna eller andra attribut på DT2
kommer att påverka DT1
. När du vill ha en riktig kopia, använd
DT2 = copy(DT1)
För att se skillnaden, här är vad som händer utan en kopia:
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
Och med en kopia:
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
Så förändringarna sprider sig inte i det senare fallet.