names(iris)[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
Garder, supprimer et réordonner les colonnes d’un data frame — par nom, plage ou fonction d’aide, de deux façons
Sélectionnez les colonnes d’un data frame en R avec dplyr select() (par nom, plage a:c, fonctions d’aide comme starts_with()/where(is.numeric), et -col pour supprimer) ou en base-R df[, c("a","b")], df[["a"]] et subset(df, select = ...). Gardez, supprimez et réordonnez des colonnes — les deux moteurs, côte à côte, même résultat.
26 juin 2026
7 juillet 2026
select(df, a, b) garde des colonnes ; select(df, -a) en supprime ; select(df, a:c) garde une plage.starts_with("Sepal"), ends_with("Width"), contains("." ), where(is.numeric).df[, c("a", "b")] garde par nom, df[, -2] supprime par position, df[["a"]] extrait une colonne sous forme de vecteur.select(df, Species, everything()) place Species en premier.Un jeu de données a souvent plus de colonnes que nécessaire. Avant de tracer un graphique, de modéliser ou d’exporter, vous voulez généralement garder quelques colonnes, supprimer le reste, ou les placer dans un ordre judicieux. C’est la sélection de colonnes.
Il existe deux routes que vous croiserez dans le code des autres :
select() — noms, plages et fonctions d’aide par motif ; se lit comme une phrase.[, extrayez une colonne avec [[, ou utilisez subset(select = ...) ; aucun paquet nécessaire.Cette leçon montre les deux, côte à côte, pour garder, supprimer, réordonner et filtrer les colonnes par motif. Les deux donnent le même résultat, vous pouvez donc lire n’importe quelle base de code et choisir celle que vous préférez. Nous utilisons le jeu de données intégré iris :
select(df, col, col, ...)select() prend le data frame, puis les colonnes à garder — non entre guillemets, séparées par des virgules. Ici, nous gardons uniquement les deux colonnes de sépale :
Sepal.Length Sepal.Width
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
Tout le reste est supprimé ; les colonnes gardées restent dans l’ordre où vous les avez listées.
df[, c("a", "b")]Le crochet [ prend les lignes avant la virgule et les colonnes après. Laissez l’emplacement des lignes vide pour garder toutes les lignes, et passez un vecteur de noms de colonnes à garder :
Sepal.Length Sepal.Width
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
Les deux mêmes colonnes. Pour extraire une seule colonne sous forme de vecteur simple (et non un data frame à une colonne), utilisez [[ ou $ :
select(iris, Sepal.Length) renvoie toujours un data frame ; iris[["Sepal.Length"]] renvoie un vecteur. Utilisez [[ lorsque vous voulez les valeurs brutes pour les passer à une fonction.
Pour retirer une colonne, négativez-la.
select(df, -col)Placez un moins devant le nom de la colonne pour la supprimer et garder le reste :
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
Supprimez-en plusieurs d’un coup en négativant un vecteur : select(iris, -c(Species, Sepal.Width)).
subset(select = ...)En base R, vous supprimez par position avec un indice négatif — Species est la 5e colonne, donc -5 :
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
Compter les positions est fragile : si l’ordre des colonnes change, -5 supprime la mauvaise colonne. subset() vous permet de supprimer par nom, ce qui résiste au réordonnancement :
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
subset(df, select = ...) est l’outil de base-R le plus proche en esprit de select() — noms non entre guillemets, et un - en tête pour supprimer.
Lorsque les colonnes que vous voulez sont adjacentes, nommez la première et la dernière avec un deux-points au lieu de les lister une par une.
a:c Petal.Length Petal.Width Species
1 1.4 0.2 setosa
2 1.4 0.2 setosa
3 1.3 0.2 setosa
4 1.5 0.2 setosa
5 1.4 0.2 setosa
6 1.7 0.4 setosa
Cela garde Petal.Length, Petal.Width et Species — tout, de la première colonne nommée à la dernière.
La même idée avec les positions. Petal.Length est la colonne 3 et Species la colonne 5 :
Petal.Length Petal.Width Species
1 1.4 0.2 setosa
2 1.4 0.2 setosa
3 1.3 0.2 setosa
4 1.5 0.2 setosa
5 1.4 0.2 setosa
6 1.7 0.4 setosa
La plage dplyr est par nom (robuste au réordonnancement) ; la plage base-R est par position. Préférez les noms dans les scripts que vous relancerez.
Lorsque vous ne voulez pas taper chaque nom — « garder toutes les colonnes Sepal », « garder chaque colonne numérique » — les fonctions d’aide à la sélection de dplyr filtrent par motif. C’est la raison pour laquelle select() brille face à l’indexation simple.
Sepal.Length Sepal.Width
1 5.1 3.5
2 4.9 3.0
3 4.7 3.2
4 4.6 3.1
5 5.0 3.6
6 5.4 3.9
En voici quelques-unes que vous utiliserez constamment :
Sepal.Width Petal.Width
1 3.5 0.2
2 3.0 0.2
3 3.2 0.2
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
where(is.numeric) est particulièrement pratique — elle garde les colonnes par type, et non par nom, donc elle fonctionne sur n’importe quel data frame. L’équivalent en base-R nécessite un sapply() explicite :
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
Même résultat — select(where(is.numeric)) est le raccourci lisible de ce motif sapply().
La sélection réordonne aussi : les colonnes ressortent dans l’ordre où vous les listez. Pour déplacer Species en tête et garder tout le reste à sa suite, utilisez everything() :
[1] "Species" "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
everything() signifie « toutes les colonnes pas encore nommées », donc rien n’est supprimé — Species saute simplement en tête. La version base-R liste explicitement le nouvel ordre :
[1] "Species" "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
Même ordre de colonnes, de deux façons. everything() vous évite de retaper tous les autres noms.
Les blocs ci-dessus se sont exécutés au moment de la compilation. Modifiez celui-ci et appuyez sur Run pour sélectionner des colonnes par vous-même — il s’exécute dans votre navigateur via webR (aucune installation).
Sélectionner les bonnes colonnes dans un fichier large et désordonné, c’est là que cela devient délicat — des dizaines de colonnes, des noms incohérents. Collez vos names() et demandez à Prova « garde uniquement les colonnes numériques et l’ID, supprime le reste » ; elle écrit l’appel select(), et comme le runtime est juste là, vous l’exécutez pour confirmer que les colonnes gardées sont bien celles que vous vouliez sur vos données. Demander à Prova →
Vous travaillez en Python ? Un guide de sélection de colonnes pandas (df[[...]], .filter(), .select_dtypes()) arrive bientôt dans la série Python.
select() est « not found » ou sélectionne la mauvaise chose. Un autre paquet (souvent MASS ou raster) définit lui aussi un select(), et celui chargé en dernier l’emporte. Si select() se comporte mal, appelez-le explicitement : dplyr::select(iris, Sepal.Length).
Supprimer une seule colonne renvoie un vecteur en base R. iris[, 5] vous donne un vecteur, mais iris[, -5] (suppression) garde un data frame — la règle est que le [ de base simplifie en vecteur lorsque le résultat a une colonne. Forcez un data frame avec drop = FALSE : iris[, 5, drop = FALSE]. dplyr select() renvoie toujours un data frame, donc il ne vous surprend jamais ici.
Noms entre guillemets ou non. dplyr select() prend des noms non entre guillemets (select(iris, Species)) ; le [, c(...)] de base prend des chaînes entre guillemets (iris[, "Species"]). Les confondre est l’erreur de copier-coller la plus fréquente — select(iris, "Species") fonctionne par tolérance, mais iris[, Species] provoque une erreur car Species n’est pas un objet.
Avec dplyr : select(df, col1, col2) garde les colonnes nommées. Avec base R : df[, c("col1", "col2")]. Les deux renvoient un data frame avec uniquement ces colonnes, dans l’ordre où vous les avez listées.
Négativez-la. dplyr : select(df, -col) en supprime une, select(df, -c(a, b)) en supprime plusieurs. Base R : df[, -2] supprime par position, ou subset(df, select = -col) supprime par nom (plus sûr, car cela résiste au réordonnancement des colonnes).
Utilisez les fonctions d’aide dplyr à l’intérieur de select() : starts_with("Sepal"), ends_with("Width"), contains("date"), matches("regex"), ou where(is.numeric) pour sélectionner par type. Elles choisissent les colonnes sans que vous tapiez chaque nom — pratique sur les data frames larges.
[ et [[ pour sélectionner des colonnes ?
df[, "x"] et df["x"] gardent une colonne (un data frame, ou un vecteur si une seule colonne se réduit). df[["x"]] et df$x extraient la colonne sous forme de vecteur de valeurs. Utilisez [[ lorsque vous voulez les valeurs brutes ; utilisez select() ou [, c(...)] lorsque vous voulez récupérer un data frame.
La sélection fixe l’ordre. dplyr : select(df, Species, everything()) déplace Species en premier et garde le reste. Base R : listez les colonnes dans le nouvel ordre, df[, c("Species", "Sepal.Length", ...)]. Rien n’est supprimé — seul l’ordre change.
À partir d’iris, gardez uniquement les colonnes numériques (supprimez le facteur Species). D’abord avec dplyr select() et une fonction d’aide, puis avec l’indexation base-R — et confirmez que les deux donnent les mêmes names().
library(dplyr)
dplyr_way <- select(iris, where(is.numeric))
base_way <- iris[, sapply(iris, is.numeric)]
identical(names(dplyr_way), names(base_way)) # TRUE
Species ?
iris a les colonnes Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species. Lequel garde tout sauf Species ?
A. select(iris, Species) B. select(iris, -Species) C. iris[, "Species"]
Afficher la réponse
B. Un - en tête supprime une colonne en dplyr, donc select(iris, -Species) garde les quatre colonnes numériques. A garde uniquement Species, et C garde aussi uniquement Species (base-R, par nom). La façon base-R de supprimer est subset(iris, select = -Species) ou iris[, -5].
Sélectionner des colonnes se résume à deux outils équivalents : dplyr select() (noms, plages a:c, fonctions d’aide comme starts_with()/where(), et -col pour supprimer), ou base-R df[, c("a", "b")] / subset(select = ...). Gardez par nom, supprimez par négation, filtrez par motif avec les fonctions d’aide dplyr, et réordonnez en listant les colonnes dans l’ordre voulu — les deux routes aboutissent au même data frame.
rename() / names(). · Filtrer des lignes en R — gardez les lignes qui remplissent une condition. · Réordonner des lignes en R — triez avec arrange() / order(). · Supprimer les lignes en double en R — éliminez les observations répétées.Prouvez que vous savez le faire. Maîtrisez toute la série Manipulation de données en R et Python — suivez votre parcours, construisez des projets et obtenez un certificat.
Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.
dès 15 $/mois facturé annuellement
✓ Vous êtes Pro — continuez. The runtime is the judge.
Recevez les nouvelles leçons R & Python par e-mail
Pratique, reproductible, sans spam. Désinscription à tout moment.
Double opt-in. Nous ne partageons jamais votre e-mail.
Cette leçon est reproductible : chaque résultat de cette page a été produit par le code affiché — modifiez n’importe quel bloc et appuyez sur Run pour le reproduire dans votre navigateur. The runtime is the judge.
@online{2026,
author = {},
title = {Sélectionner des colonnes en R : dplyr et base R},
date = {2026-06-26},
url = {https://www.datanovia.com/learn/programming/data-wrangling/select-columns-in-r},
langid = {fr}
}