Löschen Sie Datenrahmenspalten nach Namen
Ich habe eine Reihe von Spalten, die möchte ich entfernen, aus einem Daten-frame. Ich weiß, dass wir löschen können, die Sie einzeln mit so etwas wie:
df$x <- NULL
Aber ich hatte gehofft, dies mit weniger Befehle.
Auch, ich weiß, dass ich könnte löschen von Spalten mit ganzzahliger Indizierung wie diese:
df <- df[ -c(1, 3:6, 12) ]
Aber ich bin besorgt, dass die relative position der Variablen ändern kann.
Gegeben, wie mächtige R, ich dachte mir, es könnte einen besseren Weg geben als Drop jede Spalte einzeln.
InformationsquelleAutor der Frage Btibert3 | 2011-01-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine einfache Liste von Namen :
Oder, alternativ, Sie können machen Sie eine Liste von denen zu halten, und bezeichnen Sie mit Namen :
BEARBEITEN :
Für diejenigen, die noch nicht vertraut mit den
drop
argument der Indizierung Funktion, wenn Sie möchten, um eine Spalte als Daten-frame, die Sie tun:drop=TRUE
(oder nicht erwähnt wird) fallen unnötige Dimensionen, und damit die Rückkehr ein Vektor mit den Werten der Spaltey
.InformationsquelleAutor der Antwort Joris Meys
Gibt es auch die
subset
Befehl ist nützlich, wenn Sie wissen, welche Spalten Sie möchten:AKTUALISIERT, nach dem Kommentar von @hadley: Zu drop Spalten a,c, die Sie tun könnten:
InformationsquelleAutor der Antwort Prasad Chalasani
ist wahrscheinlich am einfachsten, oder für mehrere Variablen:
Oder wenn man sich mit
data.table
s (pro Wie löschen Sie eine Spalte mit Namen in Daten.Tabelle?):oder mehrere Variablen
In der Entwicklung version von
data.table
(Montageanleitung),with = FALSE
ist nicht mehr notwendig:InformationsquelleAutor der Antwort Max Ghenis
Könnten Sie
%in%
wie diese:InformationsquelleAutor der Antwort Joshua Ulrich
Liste(NULL) funktioniert auch:
InformationsquelleAutor der Antwort Vincent
Wenn Sie wollen, entfernen Sie die Spalten, die durch Verweis und vermeiden Sie die interne kopieren im Zusammenhang mit
data.frames
dann können Sie diedata.table
Paket und die Funktion:=
Können Sie ein Zeichen-vector-Namen auf der linken Seite des
:=
Betreiber, undNULL
als die RHS.Wenn Sie wollen vorgeben, die Namen als Zeichen, Vektor außerhalb der Aufruf
[
wickeln Sie den Namen des Objekts in()
oder{}
zu zwingen, die LHS zu bewertet werden, in der aufrufenden Bereichs nicht als name im Rahmen derDT
.Können Sie auch
set
vermeidet den overhead der[.data.table
und arbeitet auch fürdata.frames
!InformationsquelleAutor der Antwort mnel
Es ist ein potenziell mächtiger Strategie basiert auf der Tatsache, dass grep() gibt einen numerischen Vektor. Wenn Sie eine lange Liste von Variablen, die wie ich in einem meiner dataset, einige Variablen, Ende in "."Und die anderen, dass Ende in ".B" und Sie wollen nur diejenigen, die beenden in ".Ein" (zusammen mit all den Variablen, die nicht entsprechen, entweder das Muster, dies zu tun:
Für den Fall an die hand, mit Joris Meys Beispiel, es ist vielleicht nicht so kompakt, aber es wäre:
InformationsquelleAutor der Antwort 42-
Interesse, diese Fahnen eine von R ist seltsam mehrere syntax-Ungereimtheiten. Zum Beispiel einen zwei-Spalte-Daten-frame:
Dieser gibt einen Daten-frame
aber das gibt einen Vektor
Dies ist alles erklärt in
?[
aber es ist nicht genau das erwartete Verhalten. Naja zumindest nicht für mich...InformationsquelleAutor der Antwort jkeirstead
Andere Möglichkeit:
oder
InformationsquelleAutor der Antwort scentoni
Anderen
dplyr
Antwort. Wenn Ihre Variablen haben einige gemeinsame Benennung von Struktur, könnten Sie versuchen, diestarts_with()
. Zum BeispielWenn Sie eine Sequenz von Variablen im data frame, den Sie verwenden können
:
. Zum Beispiel, wenn Sie wollen, um die drop -var2
var3
und alle Variablen in zwischen, Sie würde nur mit der linkenvar1
:InformationsquelleAutor der Antwort Pat W.
Ausgabe:
Ausgabe:
InformationsquelleAutor der Antwort Kun Ren
Hier ist ein
dplyr
Weg, um darüber zu gehen:Ich mag das, weil es intuitiv zu Lesen & verstehen, ohne Anmerkungen und robust zu Spalten, ändern der position innerhalb des Daten-Frames. Es folgt auch die vektorisierte idiom mit
-
zum entfernen von Elementen.InformationsquelleAutor der Antwort c.gutierrez
Denke ich, es muss einen besseren idiom, aber für die Subtraktion der Spalten nach Namen, ich tendiere dazu, Folgendes zu tun:
InformationsquelleAutor der Antwort JD Long
Gibt es eine Funktion namens
dropNamed()
Bernd Bischl istBBmisc
- Paket, das tut genau dies.Der Vorteil ist, dass es vermeidet die Wiederholung der Daten-frame-argument und ist somit geeignet für Rohrleitungen in
magrittr
(genau wie diedplyr
Ansätze):InformationsquelleAutor der Antwort krlmlr
Ich bezweifle, dass diese wird viel Aufmerksamkeit erhalten, hier unten, aber wenn Sie haben eine Liste von Spalten, die Sie entfernen möchten, und Sie möchten, es zu tun in einer
dplyr
Kette ich verwendenone_of()
imselect
Klausel:Hier ist eine einfache, reproduzierbare Beispiel:
Dokumentation gefunden werden kann, durch ausführen
?one_of
oder hier:http://genomicsclass.github.io/book/pages/dplyr_tutorial.html
InformationsquelleAutor der Antwort User632716
Andere Lösung wenn Sie nicht möchten, verwenden Sie @hadley ' s vor: Wenn "COLUMN_NAME" ist der name der Spalte, die Sie löschen möchten:
InformationsquelleAutor der Antwort Nick Keramaris
Bieten die Daten-frame und eine Zeichenfolge von durch Komma getrennte Namen zu entfernen:
Nutzung:
InformationsquelleAutor der Antwort Cybernetic