data.table
Lägga till och ändra kolumner
Sök…
Anmärkningar
Den officiella vinjetten, "Referenssemantik" , är den bästa introduktionen till detta ämne.
En påminnelse: DT[where, select|update|do, by]
syntax används för att arbeta med kolumner i en datatabell.
- "Var" -delen är
i
argumentet - Delen "select | update | do" är
j
argumentet
Dessa två argument skickas vanligtvis efter position istället för med namn.
Alla ändringar av kolumner kan göras i j
. Dessutom är den set
funktionen tillgänglig för denna användning.
Redigera värden
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Redigera en kolumn
Använd :=
operatören inuti j
att skapa nya kolumner eller ändra befintliga kolumner:
DT[, mpg_sq := mpg^2]
Redigering på en delmängd av rader
Använd i
argumentet för att delmängda till rader "där" redigeringar ska göras:
DT[1:3, newvar := "Hello"]
Som i en data.frame kan vi deluppsätta med radnummer eller logiska test. Det är också möjligt att använda [en "gå med" i i
när du ändrar] [behöver_a_länk].
Ta bort en kolumn
Ta bort kolumner genom att ställa in på NULL
:
DT[, mpg_sq := NULL]
Observera att vi inte <-
tilldelar resultatet, eftersom DT
har modifierats på plats.
Redigering av flera kolumner
Lägg till flera kolumner med hjälp av :=
operatörens multivariatformat:
DT[, `:=`(mpg_sq = mpg^2, wt_sqrt = sqrt(wt))]
# or
DT[, c("mpg_sq", "wt_sqrt") := .(mpg^2, sqrt(wt))]
Syntaxen .()
Används när höger sida av LHS := RHS
är en kolumnlista.
Redigera flera sekvensberoende kolumner
Om kolumnerna är beroende och måste definieras i sekvens, är några sätt att göra det på följande sätt:
DT[, c("mpg_sq", "mpg2_hp") := .(temp1 <- mpg^2, temp1/hp)]
# or
DT[, c("mpg_sq", "mpg2_hp") := {temp1 = mpg^2; .(temp1, temp1/hp)}]
Redigera kolumner med dynamiskt bestämda namn
För dynamiskt bestämda kolumnnamn, använd parenteser:
vn = "mpg_sq"
DT[, (vn) := mpg^2]
Med set
Kolumner kan också modifieras med set
för en liten minskning av omkostnaderna, men detta är sällan nödvändigt:
set(DT, j = "hp_over_wt", v = mtcars$hp/mtcars$wt)
Ordna om kolumner
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
För att ordna om kolumnernas ordning, använd setcolorder
. Till exempel att vända dem
setcolorder(DT, rev(names(DT)))
Detta kostar nästan ingenting när det gäller prestanda, eftersom det bara permuterar listan med kolumnpekare i data.tabellen.
Byt namn på kolumner
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
För att byta namn på en kolumn (samtidigt som dess data är desamma) behöver du inte kopiera data till en kolumn med ett nytt namn och ta bort det gamla. Istället kan vi använda
setnames(DT, "mpg_sq", "mpq_squared")
för att ändra den ursprungliga kolumnen med referens.
Ändra faktornivåer och andra kolumnattribut
# example data
DT = data.table(iris)
För att ändra faktornivåer med referens, använd setattr
:
setattr(DT$Species, "levels", c("set", "ver", "vir")
# or
DT[, setattr(Species, "levels", c("set", "ver", "vir"))]
Det andra alternativet kan skriva ut resultatet på skärmen.
Med setattr
undviker vi den kopia som vanligtvis uppstår när du gör levels(x) <- lvls
, men det kommer också att hoppa över några kontroller, så det är viktigt att vara noga med att tilldela en giltig vektornivå.