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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow