it-swarm.com.de

Entfernen Sie mehrere Spalten aus data.table

Wie entferne ich mehrere Spalten aus einer data.table? Ich verwende derzeit den folgenden Code, habe jedoch 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"
68
matt_k

Dies sieht aus wie ein solider, reproduzierbarer Fehler. Es wurde abgelegt als Bug # 2791 .

Es scheint, dass das Wiederholen der Spalte versucht, die nachfolgenden Spalten zu löschen.
Wenn keine Spalten mehr vorhanden sind, stürzt R ab.


[~ # ~] Update [~ # ~] : Jetzt behoben in v1.8.11. Von NACHRICHTEN :

Das zweimalige Zuweisen zu derselben Spalte in derselben Abfrage ist nun unter bestimmten Umständen eher ein Fehler als ein Absturz. B. DT [ c ("B", "B"): = NULL] (zweimaliges Löschen derselben Spalte durch Bezugnahme). Vielen Dank an Ricardo ( # 2751 ) und matt_k ( # 2791 ) für die Meldung. Tests hinzugefügt.

35
Ricardo Saporta

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, bei dem mehrere Spalten (Variablen) hinzugefügt werden

DT[ ,`:=`(x = letters, y = "Male")]

Dadurch wird auch nach doppelten Spaltennamen gesucht. Wenn Sie also zweimal versuchen, x abzulegen, wird eine Fehlermeldung ausgegeben.

14
Pankil Shah