Weiß jemand, wie man eine ganze Spalte aus einem data.frame in R entfernt? Zum Beispiel, wenn ich diesen data.frame bekomme:
> head(data)
chr genome region
1 chr1 hg19_refGene CDS
2 chr1 hg19_refGene exon
3 chr1 hg19_refGene CDS
4 chr1 hg19_refGene exon
5 chr1 hg19_refGene CDS
6 chr1 hg19_refGene exon
und ich möchte die 2. Spalte entfernen.
Antworten:
Sie können es auf einstellen
NULL
.Wie in den Kommentaren erwähnt, gibt es hier einige andere Möglichkeiten:
Sie können mehrere Spalten entfernen über:
Seien Sie jedoch vorsichtig mit der Matrix-Teilmenge, da Sie am Ende einen Vektor erhalten können:
quelle
Data[-2]
braucht nichtdrop
Argument weil es immer wieder zurückkehrtdata.frame
ausdata.frame
. Und ich denke, dies ist ein viel besserer Weg, um Spalten (und nur Spalten) zu lokalisierendata.frame
(und es ist schneller). Überprüfen Sie:cars[-1]
(eine Spaltedata.frame
) oder bessercars[-(1:2)]
:data frame with 0 columns and 50 rows
.Data[c(1,2)]<-list(NULL)
.Um eine oder mehrere Spalten nach Namen zu entfernen, wenn die Spaltennamen bekannt sind (anstatt zur Laufzeit festgelegt zu werden), gefällt mir die
subset()
Syntax. ZB für den Datenrahmenum nur die
a
Spalte zu entfernen, die Sie tun könntenund zu entfernen
b
undd
Spalten , könnten Sie tunSie können alle Spalten zwischen entfernen
d
undb
mit :Wie oben erwähnt, funktioniert diese Syntax nur, wenn die Spaltennamen bekannt sind. Es funktioniert nicht, wenn beispielsweise die Spaltennamen programmgesteuert bestimmt werden (dh einer Variablen zugewiesen werden). Ich werde diese Warnung aus der
?subset
Dokumentation reproduzieren :quelle
(Der Vollständigkeit halber) Wenn Sie Spalten nach Namen entfernen möchten, können Sie dies tun:
Durch das Einschließen wird
drop = F
sichergestellt, dass das Ergebnis auch dann noch gleichdata.frame
bleibt, wenn nur eine Spalte übrig bleibt.quelle
Die geposteten Antworten sind sehr gut, wenn Sie mit
data.frame
s arbeiten. Diese Aufgaben können jedoch aus Speichersicht ziemlich ineffizient sein. Bei großen Datenmengen kann das Entfernen einer Spalte ungewöhnlich lange dauern und / oder aufgrund vonout of memory
Fehlern fehlschlagen . Das Paketdata.table
hilft, dieses Problem mit dem:=
Betreiber zu lösen :Ich sollte ein größeres Beispiel zusammenstellen, um die Unterschiede zu zeigen. Ich werde diese Antwort irgendwann damit aktualisieren.
quelle
data.table::set
Funktion kann aufdata.frame
s verwendet werden, um eine Spalte sofort zu entfernen oder zu ändern, ohne Kopien zu erstellen . Siehe hierEs gibt verschiedene Optionen zum Entfernen einer oder mehrerer Spalten mit
dplyr::select()
und einige Hilfsfunktionen. Die Hilfsfunktionen können nützlich sein, da bei einigen nicht alle zu löschenden Spalten benannt werden müssen. Beachten Sie, dass Sie zum Löschen von Spalten mitselect()
einem führenden-
Zeichen die Negativnamen negieren müssen.Verwenden der
dplyr::starwars
Beispieldaten für eine Vielzahl von Spaltennamen:Sie können auch nach Spaltennummer suchen:
quelle
Mit diesem können Sie das entfernen
column
undvariable
in einem anderen speichernvariable
.quelle