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.
Réponses:
Vous pouvez le régler sur
NULL
.Comme indiqué dans les commentaires, voici quelques autres possibilités:
Vous pouvez supprimer plusieurs colonnes via:
Soyez prudent avec le sous-ensemble de matrice, car vous pouvez vous retrouver avec un vecteur:
la source
Data[-2]
n'a pas besoin d'drop
argument car il revient toujoursdata.frame
dedata.frame
. Et je pense que c'est beaucoup mieux pour les colonnes localisées (et uniquement les colonnes) dansdata.frame
(et c'est plus rapide). Vérifier:cars[-1]
(un coldata.frame
) ou mieuxcars[-(1:2)]
:data frame with 0 columns and 50 rows
.Data[c(1,2)]<-list(NULL)
est nécessaire.Pour supprimer une ou plusieurs colonnes par nom, lorsque les noms des colonnes sont connus (au lieu d'être déterminés au moment de l'exécution), j'aime la
subset()
syntaxe. Par exemple pour la trame de donnéespour supprimer uniquement la
a
colonne que vous pourriez faireet pour supprimer les colonnes
b
et qued
vous pourriez faireVous pouvez supprimer toutes les colonnes entre
d
etb
avec:Comme je l'ai dit plus haut, cette syntaxe ne fonctionne que lorsque les noms des colonnes sont connus. Cela ne fonctionnera pas lorsque les noms des colonnes sont déterminés par programme (c'est-à-dire attribués à une variable). Je reproduis cet avertissement à partir de la
?subset
documentation:la source
(Pour être complet) Si vous souhaitez supprimer des colonnes par nom, vous pouvez le faire:
L'inclusion
drop = F
garantit que le résultat sera toujours undata.frame
même s'il ne reste qu'une colonne.la source
Les réponses affichées sont très bonnes lorsque vous travaillez avec l'
data.frame
art. Cependant, ces tâches peuvent être assez inefficaces du point de vue de la mémoire. Avec des données volumineuses, la suppression d'une colonne peut prendre un temps anormalement long et / ou échouer en raison d'out of memory
erreurs. Le packagedata.table
permet de résoudre ce problème avec l':=
opérateur:Je devrais rassembler un exemple plus grand pour montrer les différences. Je mettrai à jour cette réponse à un moment donné avec cela.
la source
data.table::set
fonction peut être utilisée surdata.frame
s pour supprimer ou modifier une colonne instantanément, sans faire de copie. Voir iciIl existe plusieurs options pour supprimer une ou plusieurs colonnes avec
dplyr::select()
et certaines fonctions d'assistance. Les fonctions d'assistance peuvent être utiles car certaines ne nécessitent pas de nommer toutes les colonnes spécifiques à supprimer. Notez que pour supprimer des colonnes à l'aide deselect()
vous devez utiliser un interligne-
début pour annuler les noms de colonne.Utilisation des
dplyr::starwars
exemples de données pour une variété de noms de colonnes:Vous pouvez également déposer par numéro de colonne:
la source
Avec cela, vous pouvez supprimer
column
et stockervariable
dans un autrevariable
.la source