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å.



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