Accéder au contenu principal

Sous-ensembles de jeux de données dans R

Créer des sous-ensembles est une compétence essentielle pour tout professionnel des données. Apprenez et entraînez-vous dans ce tutoriel interactif express !
Actualisé 19 sept. 2026  · 6 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Que vous compariez la réaction de différents segments démographiques à des campagnes marketing, que vous vous concentriez sur une période précise ou que vous extrayiez les informations de quelques produits de votre inventaire, créer des sous-ensembles de jeux de données vous permet d'obtenir des observations utiles. R est un excellent outil qui rend cette opération simple et intuitive. À la fin de ce tutoriel, vous saurez extraire précisément les informations dont vous avez besoin.

Créer un sous-ensemble ne modifie pas le contenu de vos données : vous sélectionnez simplement la partie la plus pertinente au regard de votre objectif. En général, il existe trois façons de sélectionner les lignes et les colonnes d'un jeu de données : par indice, par nom et par valeur.

Créer des sous-ensembles par indice (lignes et colonnes)

Une façon de sélectionner vos lignes et colonnes est d'utiliser les indices de votre jeu de données. C'est l'équivalent de formuler : « la première ligne », « toutes les lignes des 2e et 5e colonnes » ou « la première ligne des 2e à 5e colonnes ». Illustrons cela avec le jeu de données iris dans R. D'après sa documentation, « ce célèbre jeu de données (de Fisher ou d'Anderson) fournit, en centimètres, les mesures de longueur et de largeur du sépale et du pétale pour 50 fleurs de chacune des 3 espèces d'iris : Iris setosa, versicolor et virginica. »

# « La première ligne » : iris[1, ] # « Toutes les lignes des 2e et 5e colonnes » : iris[, c(2, 5)] # « La première ligne des 2e à 5e colonnes » : iris[1, 2:5]

Pour créer un sous-ensemble, utilisez des crochets après l'objet de votre jeu de données. Les lignes se spécifient en premier à l'intérieur des crochets, puis les colonnes en second, séparées par une virgule :

data[rows, columns]

Créer des sous-ensembles par nom (lignes et colonnes)

Dans R, les lignes et les colonnes disposent d'attributs de nom. Les noms de lignes sont rarement utilisés et, par défaut, correspondent à des indices : des entiers numérotés de 1 au nombre de lignes du jeu de données, comme vous l'avez vu précédemment. En appelant rownames() sur le jeu iris, vous verrez qu'ils sont simplement indexés de 1 à 150 :

 > rownames(iris)
[1] \"1\"   \"2\"   \"3\"   \"4\"   \"5\"   \"6\"   \"7\"   \"8\"   \"9\"   \"10\"  \"11\"  \"12\"  \"13\"  \"14\"
[15] \"15\"  \"16\"  \"17\"  \"18\"  \"19\"  \"20\"  \"21\"  \"22\"  \"23\"  \"24\"  \"25\"  \"26\"  \"27\"  \"28\"
[29] \"29\"  \"30\"  \"31\"  \"32\"  \"33\"  \"34\"  \"35\"  \"36\"  \"37\"  \"38\"  \"39\"  \"40\"  \"41\"  \"42\"
[43] \"43\"  \"44\"  \"45\"  \"46\"  \"47\"  \"48\"  \"49\"  \"50\"  \"51\"  \"52\"  \"53\"  \"54\"  \"55\"  \"56\"
[57] \"57\"  \"58\"  \"59\"  \"60\"  \"61\"  \"62\"  \"63\"  \"64\"  \"65\"  \"66\"  \"67\"  \"68\"  \"69\"  \"70\"
[71] \"71\"  \"72\"  \"73\"  \"74\"  \"75\"  \"76\"  \"77\"  \"78\"  \"79\"  \"80\"  \"81\"  \"82\"  \"83\"  \"84\"
[85] \"85\"  \"86\"  \"87\"  \"88\"  \"89\"  \"90\"  \"91\"  \"92\"  \"93\"  \"94\"  \"95\"  \"96\"  \"97\"  \"98\"
[99] \"99\"  \"100\" \"101\" \"102\" \"103\" \"104\" \"105\" \"106\" \"107\" \"108\" \"109\" \"110\" \"111\" \"112\"
[113] \"113\" \"114\" \"115\" \"116\" \"117\" \"118\" \"119\" \"120\" \"121\" \"122\" \"123\" \"124\" \"125\" \"126\"
[127] \"127\" \"128\" \"129\" \"130\" \"131\" \"132\" \"133\" \"134\" \"135\" \"136\" \"137\" \"138\" \"139\" \"140\"
[141] \"141\" \"142\" \"143\" \"144\" \"145\" \"146\" \"147\" \"148\" \"149\" \"150\"

> nrow(iris)
[1] 150

Les noms de lignes sont plus courants dans de petits jeux de données et servent à identifier facilement les observations. Par exemple, pour un petit jeu contenant des informations de santé sur les patients d'un médecin, les noms de lignes pourraient être les noms complets des patients.

Les noms de colonnes, en revanche, sont présents dans quasiment tous les jeux de données. Vous pouvez y accéder avec les fonctions colnames() ou names() :

colnames(iris)
[1] \"Sepal.Length\" \"Sepal.Width\"  \"Petal.Length\" \"Petal.Width\"  \"Species\"     

names(iris)
[1] \"Sepal.Length\" \"Sepal.Width\"  \"Petal.Length\" \"Petal.Width\"  \"Species\"

Pour sélectionner par les noms de lignes et colonnes, réutilisez simplement les crochets, précédés de l'objet de votre jeu de données :

# Largeur de sépale de la cinquième observation iris[\"5\", \"Sepal.Width\"] # Largeur de sépale et largeur de pétale iris[, c(\"Sepal.Width\", \"Petal.Width\")]

Important : les noms de lignes comme de colonnes sont de type caractère, il est donc indispensable d'utiliser des guillemets simples ou doubles !

Créer des sous-ensembles par valeur

Sélectionner vos lignes et colonnes par valeur offre souvent le plus de flexibilité. Par exemple, vous pouvez extraire les données sur Iris setosa avec une condition comme celle-ci :

> iris[iris$Species == \"setosa\", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

Les conditions comme iris$Species == \"setosa\" se placent dans l'élément des lignes à l'intérieur des crochets (c'est-à-dire le premier élément, avant la virgule). En plus de la condition en premier élément, vous pouvez préciser les colonnes par indice ou par nom en second élément. Dans la console ci-dessous, essayez de sélectionner uniquement les mesures de sépale de Iris setosa :

# Affichez les mesures de sépale pour setosa # Affichez les mesures de sépale pour setosa (par nom) iris[iris$Species == \"setosa\", c(\"Sepal.Length\", \"Sepal.Width\")] # Affichez les mesures de sépale pour setosa (par indice) iris[iris$Species == \"setosa\", 1:2] test_or( test_output_contains('iris[iris$Species == \"setosa\", c(\"Sepal.Length\", \"Sepal.Width\")]', incorrect_msg = \"Select just the Sepal.Length and Sepal.Width columns for the setosa iris either by name or index.\"), test_output_contains('iris[iris$Species == \"setosa\", c(\"Sepal.Width\", \"Sepal.Length\")]', incorrect_msg = \"Select just the Sepal.Length and Sepal.Width columns for the setosa iris either by name or index.\")) success_msg(\"Great work!\")

Récapitulatif

Dans ce tutoriel, vous avez :

  • Appris à créer des sous-ensembles par indice. Les lignes et colonnes sont indexées par des entiers de 1 jusqu'au nombre de lignes et de colonnes, respectivement.
  • Appris à sélectionner par nom. Vous avez vu que les noms de lignes sont rarement définis et que les noms de colonnes sont de type caractère.
  • Appris à utiliser des conditions dans l'élément des lignes (à l'intérieur des crochets) pour créer des sous-ensembles par valeur.
  • Appris à combiner ces méthodes pour plus de souplesse (par ex. : conditions pour les lignes et sélection par indice ou nom pour les colonnes).

Pour ancrer ces notions, essayez les exercices ci-dessous. La pratique fait la différence !

Exercices pratiques

Sélectionnez toutes les observations pour lesquelles la largeur du sépale est supérieure à la longueur du pétale.

# Quelles observations ont une largeur de sépale supérieure à la longueur de pétale ? # Quelles observations ont une largeur de sépale supérieure à la longueur de pétale ? iris[iris$Sepal.Width > iris$Petal.Length, ] test_output_contains('iris[iris$Sepal.Width > iris$Petal.Length, ]', incorrect_msg = paste(\"Select the observations for which Sepal.Width values\", \"are larger than Petal.Length values.\")) success_msg(\"Nice! Turns out only Iris setosa have this shape.\")
Utilisez iris$Sepal.Width > iris$Petal.Length à l'intérieur des crochets. N'oubliez pas la virgule !

Sélectionnez tous les Iris versicolor dont la largeur de sépale est supérieure à la largeur moyenne de sépale toutes espèces confondues.

# Stockez les données de versicolor dans un objet nommé versicolor # Sélectionnez tous les Iris versicolor ayant une largeur de sépale supérieure à la moyenne # Stockez les données de versicolor dans un objet nommé versicolor versicolor <- iris[iris$Species == \"versicolor\", ] # Sélectionnez tous les Iris versicolor ayant une largeur de sépale supérieure à la moyenne versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ] test_object('versicolor', undefined_msg = \"Did you define the versicolor object?\", incorrect_msg = paste(\"Select where Species is equal to \\\"versicolor\\\".\", \"Remember to use the == operator!\")) test_output_contains('versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]', incorrect_msg = paste(\"Not quite! Are you using the mean() function\", \"to find the average sepal width across all species\", \"and not just for Iris versicolor?\")) success_msg(\"Great work!\")
Utilisez la fonction mean() pour calculer la largeur moyenne de sépale dans iris, puis une condition appliquée à versicolor pour ne retenir que les valeurs supérieures à cette moyenne.

Indiquez la largeur moyenne de sépale pour tous les Iris virginica dont la longueur de pétale est inférieure à 5 centimètres.

# Vous êtes libre d'aborder ce problème comme vous le souhaitez ! # Stockez les données de virginica dans un objet nommé virginica virginica <- iris[iris$Species == \"virginica\", ] # Largeur moyenne de sépale pour Iris virginica ayant une longueur de pétale < 5 mean(virginica[virginica$Petal.Length < 5, ]$Sepal.Width) test_output_contains('2.8', incorrect_msg = \"Incorrect! This is a tough one!\") success_msg(\"Excellent!\")
Commencez par sélectionner tous les Iris virginica, puis ceux dont Petal.Length est inférieur à 5. Calculez la moyenne avec la fonction mean().

Envie d'explorer d'autres façons d'extraire des insights de vos données ? Découvrez ces cours sur DataCamp !

Consultez aussi notre tutoriel Merging Datasets in R.

Que vous compariez la réaction de différents segments démographiques à des campagnes marketing, que vous vous concentriez sur une période précise ou que vous extrayiez les informations de quelques produits de votre inventaire, créer des sous-ensembles de jeux de données vous permet d'obtenir des observations utiles. R est un excellent outil qui rend cette opération simple et intuitive. À la fin de ce tutoriel, vous saurez extraire précisément les informations dont vous avez besoin.

Créer un sous-ensemble ne modifie pas le contenu de vos données : vous sélectionnez simplement la partie la plus pertinente au regard de votre objectif. En général, il existe trois façons de sélectionner les lignes et les colonnes d'un jeu de données : par indice, par nom et par valeur.

Créer des sous-ensembles par indice (lignes et colonnes)

Une façon de sélectionner vos lignes et colonnes est d'utiliser les indices de votre jeu de données. C'est l'équivalent de formuler : « la première ligne », « toutes les lignes des 2e et 5e colonnes » ou « la première ligne des 2e à 5e colonnes ». Illustrons cela avec le jeu de données iris dans R. D'après sa documentation, « ce célèbre jeu de données (de Fisher ou d'Anderson) fournit, en centimètres, les mesures de longueur et de largeur du sépale et du pétale pour 50 fleurs de chacune des 3 espèces d'iris : Iris setosa, versicolor et virginica. »

# « La première ligne » : iris[1, ] # « Toutes les lignes des 2e et 5e colonnes » : iris[, c(2, 5)] # « La première ligne des 2e à 5e colonnes » : iris[1, 2:5]

Pour créer un sous-ensemble, utilisez des crochets après l'objet de votre jeu de données. Les lignes se spécifient en premier à l'intérieur des crochets, puis les colonnes en second, séparées par une virgule :

data[rows, columns]

Créer des sous-ensembles par nom (lignes et colonnes)

Dans R, les lignes et les colonnes disposent d'attributs de nom. Les noms de lignes sont rarement utilisés et, par défaut, correspondent à des indices : des entiers numérotés de 1 au nombre de lignes du jeu de données, comme vous l'avez vu précédemment. En appelant rownames() sur le jeu iris, vous verrez qu'ils sont simplement indexés de 1 à 150 :

 > rownames(iris)
[1] \"1\"   \"2\"   \"3\"   \"4\"   \"5\"   \"6\"   \"7\"   \"8\"   \"9\"   \"10\"  \"11\"  \"12\"  \"13\"  \"14\"
[15] \"15\"  \"16\"  \"17\"  \"18\"  \"19\"  \"20\"  \"21\"  \"22\"  \"23\"  \"24\"  \"25\"  \"26\"  \"27\"  \"28\"
[29] \"29\"  \"30\"  \"31\"  \"32\"  \"33\"  \"34\"  \"35\"  \"36\"  \"37\"  \"38\"  \"39\"  \"40\"  \"41\"  \"42\"
[43] \"43\"  \"44\"  \"45\"  \"46\"  \"47\"  \"48\"  \"49\"  \"50\"  \"51\"  \"52\"  \"53\"  \"54\"  \"55\"  \"56\"
[57] \"57\"  \"58\"  \"59\"  \"60\"  \"61\"  \"62\"  \"63\"  \"64\"  \"65\"  \"66\"  \"67\"  \"68\"  \"69\"  \"70\"
[71] \"71\"  \"72\"  \"73\"  \"74\"  \"75\"  \"76\"  \"77\"  \"78\"  \"79\"  \"80\"  \"81\"  \"82\"  \"83\"  \"84\"
[85] \"85\"  \"86\"  \"87\"  \"88\"  \"89\"  \"90\"  \"91\"  \"92\"  \"93\"  \"94\"  \"95\"  \"96\"  \"97\"  \"98\"
[99] \"99\"  \"100\" \"101\" \"102\" \"103\" \"104\" \"105\" \"106\" \"107\" \"108\" \"109\" \"110\" \"111\" \"112\"
[113] \"113\" \"114\" \"115\" \"116\" \"117\" \"118\" \"119\" \"120\" \"121\" \"122\" \"123\" \"124\" \"125\" \"126\"
[127] \"127\" \"128\" \"129\" \"130\" \"131\" \"132\" \"133\" \"134\" \"135\" \"136\" \"137\" \"138\" \"139\" \"140\"
[141] \"141\" \"142\" \"143\" \"144\" \"145\" \"146\" \"147\" \"148\" \"149\" \"150\"

> nrow(iris)
[1] 150

Les noms de lignes sont plus courants dans de petits jeux de données et servent à identifier facilement les observations. Par exemple, pour un petit jeu contenant des informations de santé sur les patients d'un médecin, les noms de lignes pourraient être les noms complets des patients.

Les noms de colonnes, en revanche, sont présents dans quasiment tous les jeux de données. Vous pouvez y accéder avec les fonctions colnames() ou names() :

colnames(iris)
[1] \"Sepal.Length\" \"Sepal.Width\"  \"Petal.Length\" \"Petal.Width\"  \"Species\"     

names(iris)
[1] \"Sepal.Length\" \"Sepal.Width\"  \"Petal.Length\" \"Petal.Width\"  \"Species\"

Pour sélectionner par les noms de lignes et colonnes, réutilisez simplement les crochets, précédés de l'objet de votre jeu de données :

# Largeur de sépale de la cinquième observation iris[\"5\", \"Sepal.Width\"] # Largeur de sépale et largeur de pétale iris[, c(\"Sepal.Width\", \"Petal.Width\")]

Important : les noms de lignes comme de colonnes sont de type caractère, il est donc indispensable d'utiliser des guillemets simples ou doubles !

Créer des sous-ensembles par valeur

Sélectionner vos lignes et colonnes par valeur offre souvent le plus de flexibilité. Par exemple, vous pouvez extraire les données sur Iris setosa avec une condition comme celle-ci :

> iris[iris$Species == \"setosa\", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa

...

47          5.1         3.8          1.6         0.2  setosa
48          4.6         3.2          1.4         0.2  setosa
49          5.3         3.7          1.5         0.2  setosa
50          5.0         3.3          1.4         0.2  setosa

Les conditions comme iris$Species == \"setosa\" se placent dans l'élément des lignes à l'intérieur des crochets (c'est-à-dire le premier élément, avant la virgule). En plus de la condition en premier élément, vous pouvez préciser les colonnes par indice ou par nom en second élément. Dans la console ci-dessous, essayez de sélectionner uniquement les mesures de sépale de Iris setosa :

# Affichez les mesures de sépale pour setosa # Affichez les mesures de sépale pour setosa (par nom) iris[iris$Species == \"setosa\", c(\"Sepal.Length\", \"Sepal.Width\")] # Affichez les mesures de sépale pour setosa (par indice) iris[iris$Species == \"setosa\", 1:2] test_or( test_output_contains('iris[iris$Species == \"setosa\", c(\"Sepal.Length\", \"Sepal.Width\")]', incorrect_msg = \"Select just the Sepal.Length and Sepal.Width columns for the setosa iris either by name or index.\"), test_output_contains('iris[iris$Species == \"setosa\", c(\"Sepal.Width\", \"Sepal.Length\")]', incorrect_msg = \"Select just the Sepal.Length and Sepal.Width columns for the setosa iris either by name or index.\")) success_msg(\"Great work!\")

Récapitulatif

Dans ce tutoriel, vous avez :

  • Appris à créer des sous-ensembles par indice. Les lignes et colonnes sont indexées par des entiers de 1 jusqu'au nombre de lignes et de colonnes, respectivement.
  • Appris à sélectionner par nom. Vous avez vu que les noms de lignes sont rarement définis et que les noms de colonnes sont de type caractère.
  • Appris à utiliser des conditions dans l'élément des lignes (à l'intérieur des crochets) pour créer des sous-ensembles par valeur.
  • Appris à combiner ces méthodes pour plus de souplesse (par ex. : conditions pour les lignes et sélection par indice ou nom pour les colonnes).

Pour ancrer ces notions, essayez les exercices ci-dessous. La pratique fait la différence !

Exercices pratiques

Sélectionnez toutes les observations pour lesquelles la largeur du sépale est supérieure à la longueur du pétale.

# Quelles observations ont une largeur de sépale supérieure à la longueur de pétale ? # Quelles observations ont une largeur de sépale supérieure à la longueur de pétale ? iris[iris$Sepal.Width > iris$Petal.Length, ] test_output_contains('iris[iris$Sepal.Width > iris$Petal.Length, ]', incorrect_msg = paste(\"Select the observations for which Sepal.Width values\", \"are larger than Petal.Length values.\")) success_msg(\"Nice! Turns out only Iris setosa have this shape.\")
Utilisez iris$Sepal.Width > iris$Petal.Length à l'intérieur des crochets. N'oubliez pas la virgule !

Sélectionnez tous les Iris versicolor dont la largeur de sépale est supérieure à la largeur moyenne de sépale toutes espèces confondues.

# Stockez les données de versicolor dans un objet nommé versicolor # Sélectionnez tous les Iris versicolor ayant une largeur de sépale supérieure à la moyenne # Stockez les données de versicolor dans un objet nommé versicolor versicolor <- iris[iris$Species == \"versicolor\", ] # Sélectionnez tous les Iris versicolor ayant une largeur de sépale supérieure à la moyenne versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ] test_object('versicolor', undefined_msg = \"Did you define the versicolor object?\", incorrect_msg = paste(\"Select where Species is equal to \\\"versicolor\\\".\", \"Remember to use the == operator!\")) test_output_contains('versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]', incorrect_msg = paste(\"Not quite! Are you using the mean() function\", \"to find the average sepal width across all species\", \"and not just for Iris versicolor?\")) success_msg(\"Great work!\")
Utilisez la fonction mean() pour calculer la largeur moyenne de sépale dans iris, puis une condition appliquée à versicolor pour ne retenir que les valeurs supérieures à cette moyenne.

Indiquez la largeur moyenne de sépale pour tous les Iris virginica dont la longueur de pétale est inférieure à 5 centimètres.

# Vous êtes libre d'aborder ce problème comme vous le souhaitez ! # Stockez les données de virginica dans un objet nommé virginica virginica <- iris[iris$Species == \"virginica\", ] # Largeur moyenne de sépale pour Iris virginica ayant une longueur de pétale < 5 mean(virginica[virginica$Petal.Length < 5, ]$Sepal.Width) test_output_contains('2.8', incorrect_msg = \"Incorrect! This is a tough one!\") success_msg(\"Excellent!\")
Commencez par sélectionner tous les Iris virginica, puis ceux dont Petal.Length est inférieur à 5. Calculez la moyenne avec la fonction mean().

Envie d'explorer d'autres façons d'extraire des insights de vos données ? Découvrez ces cours sur DataCamp !

Consultez aussi notre tutoriel Merging Datasets in R.

Sujets
R
Science des données

En savoir plus sur R

Cours

Manipulation de données avec dplyr

4 h
174K
Développez vos compétences Tidyverse en transformant et manipulant des données avec dplyr.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow