Was ist der richtige Weg, um mehrere Spalten aus einer data.table zu entfernen? Ich verwende derzeit den folgenden Code, habe jedoch ein unerwartetes Verhalten festgestellt, als ich versehentlich einen der Spaltennamen wiederholt habe. Ich war mir nicht sicher, ob dies ein Fehler war oder ob ich Spalten nicht auf diese Weise entfernen sollte.
library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"
Das obige funktioniert gut, aber
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"
r
data.table
matt_k
quelle
quelle
:=
Aufgabe in einen Aufruf einschließenunique()
(dh verwendenDT[ ,unique(c("x","x")) := NULL]
), um besonders defensiv zu sein. Da dies wie ein data.table- Fehler erscheint, müssen Sie das wohl nur tun, bis Matthew Dowle diesen Anrufunique()
innerhalb des[.data.table()
DT[, c(myCols):=NULL]
und das sollte den Trick tun. Siehe rdatatable.gitlab.io/data.table/articles/…Antworten:
Dies sieht aus wie ein solider, reproduzierbarer Fehler. Es wurde als Bug # 2791 abgelegt .
Es scheint, dass beim Wiederholen der Spalte versucht wird, die nachfolgenden Spalten zu löschen.
Wenn keine Spalten mehr vorhanden sind, stürzt R ab.
UPDATE : Jetzt in Version 1.8.11 behoben. Aus NEWS :
quelle
DT[ , .("x","x") := NULL]
fehlschlägt. Es scheint, als müsste es sich um einen Vektor der Namen der Spalten als Zeichenfolgen handeln.Dieses Q wurde beantwortet, aber betrachten Sie dies als Randnotiz.
Ich bevorzuge die folgende Syntax, um mehrere Spalten zu löschen
DT[ ,`:=`(x = NULL, y = NULL)]
weil es mit dem übereinstimmt, um mehrere Spalten (Variablen) hinzuzufügen
DT[ ,`:=`(x = letters, y = "Male")]
Dadurch wird auch nach doppelten Spaltennamen gesucht. Wenn Sie also versuchen,
x
zweimal zu fallen, wird eine Fehlermeldung ausgegeben.quelle