Ho un certo numero di colonne che vorrei rimuovere da un frame di dati. So che possiamo eliminarle individualmente usando qualcosa come:
df$x <- NULL
Ma speravo di poterlo fare con meno comandi.
Inoltre, so che potrei eliminare le colonne usando l'indicizzazione dei numeri interi in questo modo:
df <- df[ -c(1, 3:6, 12) ]
Ma sono preoccupato che la posizione relativa delle mie variabili possa cambiare.
Dato quanto è potente R, ho pensato che ci potrebbe essere un modo migliore che far cadere ogni colonna una per una.
Si può usare una semplice lista di nomi :
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)]
Oppure, in alternativa, puoi fare una lista di quelli da tenere e riferirti a loro per nome:
keeps <- c("y", "a")
DF[keeps]
EDIT :
Per chi ancora non conosce l'argomento drop
della funzione di indicizzazione, se volete mantenere una colonna come data frame, lo fate:
keeps <- "y"
DF[ , keeps, drop = FALSE]
drop=TRUE
(o non menzionarlo) farà cadere le dimensioni non necessarie, e quindi restituirà un vettore con i valori della colonna y
.
C'è anche il comando subset
, utile se sapete quali colonne volete:
df <- data.frame(a = 1:10, b = 2:11, c = 3:12)
df <- subset(df, select = c(a, c))
Aggiornato dopo il commento di @hadley: Per gettare le colonne a,c si potrebbe fare:
df <- subset(df, select = -c(a, c))