317 votes

Suppression d'une colonne entière d'un data.frame en R

Quelqu'un sait-il comment supprimer une colonne entière d'un cadre de données dans R ? Par exemple, si l'on me donne ce cadre de données :

> 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.

2 votes

12voto

sbha Points 1948

Il existe plusieurs options pour supprimer une ou plusieurs colonnes avec dplyr::select() et quelques fonctions d'aide. Les fonctions d'aide peuvent être utiles car certaines ne nécessitent pas de nommer toutes les colonnes spécifiques à supprimer. Notez que pour déposer des colonnes en utilisant select() vous devez utiliser un caractère de tête - pour annuler les noms des colonnes.

Utilisation de la dplyr::starwars données d'échantillon pour une certaine variété dans les noms de colonnes :

library(dplyr)

starwars %>% 
  select(-height) %>%                  # a specific column name
  select(-one_of('mass', 'films')) %>% # any columns named in one_of()
  select(-(name:hair_color)) %>%       # the range of columns from 'name' to 'hair_color'
  select(-contains('color')) %>%       # any column name that contains 'color'
  select(-starts_with('bi')) %>%       # any column name that starts with 'bi'
  select(-ends_with('er')) %>%         # any column name that ends with 'er'
  select(-matches('^v.+s$')) %>%       # any column name matching the regex pattern
  select_if(~!is.list(.)) %>%          # not by column name but by data type
  head(2)

# A tibble: 2 x 2
homeworld species
  <chr>     <chr>  
1 Tatooine  Human  
2 Tatooine  Droid 

Vous pouvez également déposer par numéro de colonne :

starwars %>% 
  select(-2, -(4:10)) # column 2 and columns 4 through 10

0 votes

Excellente réponse. Avez-vous une idée de la façon de supprimer une colonne qui contient une certaine valeur dans n'importe laquelle de ses lignes (et non dans son nom de colonne comme vous l'avez proposé ci-dessus) ?

0 votes

Df[,-which(sapply(df, function(x) any(x == a)))], où df est votre cadre de données et a est votre valeur spécifique, par exemple : mtcars[,-which(sapply(mtcars, function(x) any(x==4)))]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X