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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow