Supprimer une colonne entière d’un data.frame en R

Est-ce que quelqu’un sait comment supprimer une colonne entière d’un data.frame dans R? Par exemple si on me donne ce data.frame:

> head(data) chr genome region 1 chr1 hg19_refGene CDS 2 chr1 hg19_refGene exon 3 chr1 hg19_refGene CDS 4 chr1 hg19_refGene exon 5 chr1 hg19_refGene CDS 6 chr1 hg19_refGene exon 

et je veux supprimer la 2ème colonne.

Vous pouvez le définir sur NULL .

 > Data$genome <- NULL > head(Data) chr region 1 chr1 CDS 2 chr1 exon 3 chr1 CDS 4 chr1 exon 5 chr1 CDS 6 chr1 exon 

Comme indiqué dans les commentaires, voici d’autres possibilités:

 Data[2] <- NULL # Wojciech Sobala Data[[2]] <- NULL # same as above Data <- Data[,-2] # Ian Fellows Data <- Data[-2] # same as above 

Vous pouvez supprimer plusieurs colonnes via:

 Data[1:2] <- list(NULL) # Marek Data[1:2] <- NULL # does not work! 

Soyez prudent avec la masortingce, mais vous pouvez vous retrouver avec un vecteur:

 Data <- Data[,-(2:3)] # vector Data <- Data[,-(2:3),drop=FALSE] # still a data.frame 

Pour supprimer une ou plusieurs colonnes par nom, lorsque les noms de colonne sont connus (par opposition à leur détermination au moment de l’exécution), j’aime la syntaxe subset() . Par exemple pour la firebase database

 df <- data.frame(a=1:3, d=2:4, c=3:5, b=4:6) 

supprimer uniquement la colonne que vous pourriez faire

 Data <- subset( Data, select = -a ) 

et pour supprimer les colonnes b et d vous pourriez faire

 Data <- subset( Data, select = -c(d, b ) ) 

Vous pouvez supprimer toutes les colonnes entre d et b avec:

 Data <- subset( Data, select = -c( d : b ) 

Comme je l’ai dit plus haut, cette syntaxe ne fonctionne que lorsque les noms de colonne sont connus. Cela ne fonctionnera pas si, par exemple, les noms de colonnes sont déterminés par programmation (c'est-à-dire assignés à une variable). Je reproduirai cet avertissement à partir de la documentation du ?subset :

Attention:

Ceci est une fonction pratique destinée à être utilisée de manière interactive. Pour la programmation, il est préférable d'utiliser les fonctions de sous-ensemble standard comme «[», et en particulier l'évaluation non standard de l'argument «sous-ensemble» peut avoir des conséquences imprévues.

Les réponses affichées sont très bonnes lorsque vous travaillez avec data.frame s. Cependant, ces tâches peuvent être assez inefficaces du sharepoint vue de la mémoire. Avec des données volumineuses, la suppression d’une colonne peut prendre un temps inhabituellement long et / ou échouer en raison out of memory erreurs out of memory insuffisante. Le package data.table aide à résoudre ce problème avec l’opérateur: := :

 library(data.table) > dt <- data.table(a = 1, b = 1, c = 1) > dt[,a:=NULL] bc [1,] 1 1 

Je devrais rassembler un plus grand exemple pour montrer les différences. Je vais mettre à jour cette réponse à un moment donné avec cela.

(Pour être complet) Si vous souhaitez supprimer les colonnes par nom, vous pouvez le faire:

 cols.dont.want <- "genome" cols.dont.want <- c("genome", "region") # if you want to remove multiple columns data <- data[, ! names(data) %in% cols.dont.want, drop = F] 

Inclure drop = F garantit que le résultat sera toujours un data.frame même si une seule colonne rest.

Avec cela, vous pouvez supprimer la column et stocker la variable dans une autre variable .

 df = subset(data, select = -c(genome) )