Ik heb een aantal kolommen die ik wil verwijderen uit een dataframe. Ik weet dat we ze individueel kunnen verwijderen met iets als:
df$x <- NULL
Maar ik hoopte dit met minder commando's te kunnen doen.
Ook weet ik dat ik kolommen kan laten vallen met behulp van integer indexering zoals deze:
df <- df[ -c(1, 3:6, 12) ]
Maar ik ben bezorgd dat de relatieve positie van mijn variabelen kan veranderen.
Gezien hoe krachtig R is, dacht ik dat er misschien een betere manier is dan elke kolom één voor één te laten vallen.
U kunt een eenvoudige lijst met namen gebruiken :
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)]
Of u kunt een lijst maken van degenen die u wilt behouden en ze bij naam noemen :
keeps <- c("y", "a")
DF[keeps]
EDIT :
Voor degenen die nog steeds niet bekend zijn met het drop
argument van de indexeringsfunctie, als je één kolom als een dataframe wilt houden, dan doe je dat:
keeps <- "y"
DF[ , keeps, drop = FALSE]
drop=TRUE
(of het niet vermelden ervan) zal onnodige dimensies laten vallen, en dus een vector teruggeven met de waarden van kolom y
.
Er is ook het subset
commando, handig als je weet welke kolommen je wilt:
df <- data.frame(a = 1:10, b = 2:11, c = 3:12)
df <- subset(df, select = c(a, c))
UPDATED na commentaar van @hadley: Om de kolommen a,c te drop zou je kunnen doen:
df <- subset(df, select = -c(a, c))