Jeg har en række kolonner, som jeg gerne vil fjerne fra en dataramme. Jeg ved, at vi kan slette dem individuelt ved hjælp af noget som f.eks:
df$x <- NULL
Men jeg håbede på at kunne gøre det med færre kommandoer.
Jeg ved også, at jeg kunne droppe kolonner ved hjælp af integer indeksering som dette:
df <- df[ -c(1, 3:6, 12) ]
Men jeg er bekymret for, at den relative position af mine variabler kan ændre sig.
I betragtning af hvor kraftfuld R er, tænkte jeg, at der måske er en bedre måde end at droppe hver kolonne en efter en.
Du kan bruge en simpel liste over navne :
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)]
Eller alternativt kan du lave en liste over dem, du vil beholde, og henvise til dem ved navn :
keeps <- c("y", "a")
DF[keeps]
EDIT :
Til dem, der stadig ikke er bekendt med drop
-argumentet i indekseringsfunktionen, hvis man ønsker at beholde en kolonne som en dataramme, gør man det:
keeps <- "y"
DF[ , keeps, drop = FALSE]
drop=TRUE
(eller ikke at nævne det) vil droppe unødvendige dimensioner, og dermed returnere en vektor med værdierne i kolonne y
.
Der findes også kommandoen subset
, som er nyttig, hvis du ved, hvilke kolonner du vil have:
df <- data.frame(a = 1:10, b = 2:11, c = 3:12)
df <- subset(df, select = c(a, c))
OPDATERET efter kommentar fra @hadley: For at fjerne kolonnerne a,c kunne du gøre:
df <- subset(df, select = -c(a, c))