data.table
Spalten hinzufügen und ändern
Suche…
Bemerkungen
Die offizielle Vignette "Referenzsemantik" ist die beste Einführung in dieses Thema.
Eine Erinnerung: Die DT[where, select|update|do, by]
Syntax wird verwendet, um mit Spalten einer data.table zu arbeiten.
- "Wo" ist das
i
Argument - Der Teil "select | update | do" ist das Argument
j
Diese beiden Argumente werden normalerweise nach Position statt nach Name übergeben.
Alle Änderungen an den Spalten können in j
. Zusätzlich ist die set
Funktion für diese Verwendung verfügbar.
Werte bearbeiten
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Eine Spalte bearbeiten
Verwenden Sie den Operator :=
in j
, um neue Spalten zu erstellen oder vorhandene zu ändern:
DT[, mpg_sq := mpg^2]
Bearbeiten einer Teilmenge von Zeilen
Verwenden Sie das Argument " i
, um die Zeilen in den Untermengen zu sortieren, in denen "Änderungen" vorgenommen werden sollen:
DT[1:3, newvar := "Hello"]
Wie in einem data.frame können wir eine Teilmenge mit Zeilennummern oder logischen Tests vornehmen. Es ist auch möglich, [einen "Join" in i
] [need_a_link].
Spalte entfernen
Spalten entfernen, indem Sie NULL
:
DT[, mpg_sq := NULL]
Beachten Sie, dass wir das Ergebnis nicht <-
zuweisen, da DT
und Stelle geändert wurde.
Mehrere Spalten bearbeiten
Fügen Sie mehrere Spalten hinzu, indem Sie das multivariate Format des Operators :=
verwenden:
DT[, `:=`(mpg_sq = mpg^2, wt_sqrt = sqrt(wt))]
# or
DT[, c("mpg_sq", "wt_sqrt") := .(mpg^2, sqrt(wt))]
Die Syntax .()
Wird verwendet, wenn die rechte Seite von LHS := RHS
eine Liste von Spalten ist.
Mehrere sequenziell abhängige Spalten bearbeiten
Wenn die Spalten abhängig sind und in der Reihenfolge definiert werden müssen, gibt es folgende Möglichkeiten:
DT[, c("mpg_sq", "mpg2_hp") := .(temp1 <- mpg^2, temp1/hp)]
# or
DT[, c("mpg_sq", "mpg2_hp") := {temp1 = mpg^2; .(temp1, temp1/hp)}]
Spalten mit dynamisch festgelegten Namen bearbeiten
Verwenden Sie für dynamisch bestimmte Spaltennamen Klammern:
vn = "mpg_sq"
DT[, (vn) := mpg^2]
set
Spalten können auch mit set
geändert werden set
um den Overhead zu reduzieren. Dies ist jedoch selten notwendig:
set(DT, j = "hp_over_wt", v = mtcars$hp/mtcars$wt)
Spalten neu anordnen
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Um die Reihenfolge der Spalten neu setcolorder
, verwenden Sie setcolorder
. Zum Beispiel, um sie umzukehren
setcolorder(DT, rev(names(DT)))
Dies kostet fast nichts in Bezug auf die Leistung, da es nur die Liste der Spaltenzeiger in der data.table durchläuft.
Spalten umbenennen
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
Um eine Spalte umzubenennen (wobei die Daten gleich bleiben), müssen Sie die Daten nicht in eine Spalte mit einem neuen Namen kopieren und die alte löschen. Stattdessen können wir verwenden
setnames(DT, "mpg_sq", "mpq_squared")
um die ursprüngliche Spalte durch Verweis zu ändern.
Faktorstufen und andere Spaltenattribute ändern
# example data
DT = data.table(iris)
Verwenden Sie setattr
um die Faktorstufen nach Referenz zu setattr
:
setattr(DT$Species, "levels", c("set", "ver", "vir")
# or
DT[, setattr(Species, "levels", c("set", "ver", "vir"))]
Die zweite Option druckt das Ergebnis möglicherweise auf den Bildschirm.
Mit setattr
vermeiden wir die Kopie, die normalerweise bei levels(x) <- lvls
, überspringt jedoch einige Überprüfungen.