Ich habe eine Reihe von Spalten, die ich gerne aus einem Datenrahmen entfernen würde. Ich weiß, dass wir sie einzeln mit etwas wie löschen können:
df$x <- NULL
Aber ich hatte gehofft, dass ich dies mit weniger Befehlen erreichen kann.
Ich weiß auch, dass ich Spalten mit einer ganzzahligen Indizierung wie dieser löschen könnte:
df <- df[ -c(1, 3:6, 12) ]
Aber ich befürchte, dass sich die relative Position meiner Variablen ändern könnte.
In Anbetracht der Leistungsfähigkeit von R dachte ich mir, dass es vielleicht einen besseren Weg gibt, als jede Spalte einzeln fallen zu lassen.
Sie können eine einfache Liste von Namen verwenden:
DF <- data.frame(
x=1:10,
y=10:1,
z=rep(5,10),
a=11:20
)
drops <- c("x","z")
DF[ , !(names(DF) %in% drops)]
Oder Sie können eine Liste der zu behaltenden Personen erstellen und sie mit Namen ansprechen:
keeps <- c("y", "a")
DF[keeps]
EDIT :
Für diejenigen, die noch nicht mit dem drop
-Argument der Indizierungsfunktion vertraut sind: Wenn Sie eine Spalte als Datenrahmen behalten wollen, können Sie das tun:
keeps <- "y"
DF[ , keeps, drop = FALSE]
Mit drop=TRUE
(oder ohne Angabe) werden unnötige Dimensionen weggelassen und somit ein Vektor mit den Werten der Spalte y
zurückgegeben.
Es gibt auch den Befehl subset
, der nützlich ist, wenn Sie wissen, welche Spalten Sie benötigen:
df <- data.frame(a = 1:10, b = 2:11, c = 3:12)
df <- subset(df, select = c(a, c))
AKTUALISIERT nach Kommentar von @hadley: Um die Spalten a,c zu entfernen, könnte man das tun:
df <- subset(df, select = -c(a, c))
Sie könnten %in%
wie folgt verwenden:
df[, !(colnames(df) %in% c("x","bar","foo"))]