Mam kilka kolumn, które chciałbym usunąć z ramki danych. Wiem, że możemy usuwać je pojedynczo używając czegoś takiego jak:
df$x <- NULL
Ale miałem nadzieję zrobić to za pomocą mniejszej liczby poleceń.
Wiem też, że mógłbym upuścić kolumny za pomocą indeksowania całkowitego w ten sposób:
df <- df[ -c(1, 3:6, 12) ]
Ale martwię się, że względna pozycja moich zmiennych może się zmienić.
Biorąc pod uwagę, jak potężny jest R, pomyślałem, że może być lepszy sposób niż upuszczanie każdej kolumny po kolei.
Możesz użyć prostej listy nazwisk :
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)]
Lub, alternatywnie, możesz zrobić listę tych, które należy zachować i odnieść się do nich po nazwie :
keeps <- c("y", "a")
DF[keeps]
EDIT :
Dla tych, którzy wciąż nie są zaznajomieni z argumentem drop
funkcji indeksowania, jeśli chcesz zachować jedną kolumnę jako ramkę danych, robisz to:
keeps <- "y"
DF[ , keeps, drop = FALSE]
drop=TRUE
(lub nie wspominając o tym) spowoduje usunięcie zbędnych wymiarów, a więc zwróci wektor z wartościami kolumny y
.
Istnieje również polecenie subset
, przydatne, jeśli wiesz, które kolumny chcesz:
df <- data.frame(a = 1:10, b = 2:11, c = 3:12)
df <- subset(df, select = c(a, c))
AKTUALIZACJA po komentarzu @hadley: Aby odrzucić kolumny a,c mógłbyś zrobić:
df <- subset(df, select = -c(a, c))