Les tableaux de données
Informatique — R, chapitre 4
Un vecteur ne décrit qu’une variable. Une enquête en contient des dizaines, mesurées sur les mêmes individus. La structure qui les réunit s’appelle le data frame : les lignes sont des observations, les colonnes des variables. C’est l’objet central de R, et celui sur lequel travaillent toutes les fonctions statistiques.
4.1 Construire un tableau
4.1.1 Colonne par colonne
Toutes les colonnes doivent avoir la même longueur : c’est la seule contrainte. Chacune garde son propre type — du texte ici, des nombres là.
4.1.2 Regarder avant de calculer
str avant tout
Devant un fichier importé, str est la première commande à taper. Elle révèle en une ligne par colonne le type que R a deviné — et c’est souvent là que se cache l’erreur : une colonne numérique lue comme du texte parce qu’un séparateur décimal était une virgule.
Le chapitre suivant, consacré à l’import, y revient longuement.
4.2 Extraire
4.2.1 Une colonne
Le $ est de loin le plus employé. Retenez-le d’abord ; les deux autres servent quand le nom de la colonne est lui-même dans une variable.
4.2.2 Lignes et colonnes
Les crochets d’un tableau prennent deux arguments séparés par une virgule : lignes d’abord, colonnes ensuite.
d[2] sans virgule ne renvoie pas la deuxième ligne : R comprend la deuxième colonne, comme pour une liste.
Écrivez toujours la virgule. d[2, ] pour une ligne, d[, 2] pour une colonne. L’espace après la virgule aide l’œil.
4.3 Filtrer les lignes
Tout ce qu’a montré le chapitre précédent s’applique, à la place des lignes.
La fonction subset propose une écriture plus légère, sans répéter le nom du tableau.
subset : commode en console, déconseillé dans un script
subset cherche les noms de colonnes dans le tableau sans qu’on les préfixe — ce qui est agréable à taper, mais rend le comportement dépendant du contexte.
Pour un script destiné à durer, d[d$pib > 40, ] est plus sûr. Et le chapitre 10 montrera filter de dplyr, qui offre la lisibilité de subset sans ses inconvénients.
4.4 Modifier et enrichir
4.4.1 Créer une colonne
Aucune déclaration préalable : nommer une colonne qui n’existe pas la crée.
4.4.2 Recoder
4.4.3 Supprimer, renommer, trier
C’est ici que order, introduit au chapitre précédent, prend tout son sens : il réordonne les lignes entières, en gardant chaque observation solidaire.
4.5 Croiser et agréger
aggregate utilise la notation formule y ~ x, qui se lit « y expliqué par x ». Cette écriture traverse tout R : elle sert aussi aux graphiques et aux régressions du chapitre 7.
4.6 Assembler deux tableaux
rbind empile des tableaux de mêmes colonnes. merge apparie deux tableaux par une clé commune — l’équivalent d’une recherche verticale de tableur, en une commande.
merge
Par défaut, merge ne conserve que les lignes présentes dans les deux tableaux. Une ville absente de pop disparaîtrait sans avertissement.
Comparez nrow avant et après. Si vous voulez tout garder, ajoutez all.x = TRUE.
À vous
À partir du tableau ci-dessous, créez une colonne pib_hab, gardez les régions du Centre et du Nord, et triez par PIB par habitant décroissant.
d$pib_hab <- d$pib / d$hab
d2 <- d[d$region %in% c("Centre", "Nord"), ]
d2 <- d2[order(-d2$pib_hab), ]
d2Trois lignes, dans l’ordre naturel du raisonnement : créer, filtrer, trier. Le chapitre 10 montrera comment les enchaîner en une seule instruction lisible.
Ce qu’il faut retenir
| Écriture | Effet |
|---|---|
data.frame(...) |
construire un tableau |
dim, names, str, summary |
inspecter avant de calculer |
d$pib |
extraire une colonne |
d[lignes, colonnes] |
extraire — la virgule est obligatoire |
d[d$pib > 40, ] |
filtrer les lignes |
subset |
filtrer plus lisiblement, en console |
d$nouvelle <- ... |
créer une colonne |
d$col <- NULL |
supprimer une colonne |
d[order(-d$pib), ] |
trier le tableau entier |
table, tapply, aggregate |
effectifs et moyennes par groupe |
rbind, merge |
empiler, apparier par clé |
Le chapitre suivant montre comment faire entrer vos propres données dans ces tableaux : importer un CSV ou un fichier Excel, et exporter ses résultats.