Statistiques descriptives pour données catégorielles en R : tableaux de contingence

Résumez des données catégorielles — tableaux de fréquences et de contingence, proportions et marges — et visualisez-les avec des diagrammes en barres, circulaires et en mosaïque

Apprenez à résumer des données catégorielles en R — construisez des tableaux de fréquences à une entrée et des tableaux de contingence à deux (ou plusieurs) entrées avec table() et xtabs(), ajoutez proportions et marges avec prop.table() et addmargins(), et visualisez les effectifs avec des diagrammes en barres, circulaires/en anneau, des balloon plots et des graphiques en mosaïque. La première étape avant tout test catégoriel.

Date de publication

23 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Les données catégorielles se résument en comptant — tableaux de fréquences (une variable) et tableaux de contingence (deux variables ou plus croisées).
  • Construisez-les avec R de base : table() ou xtabs() ; ajoutez les proportions avec prop.table() et les totaux par ligne / colonne / général avec addmargins().
  • Visualisez les effectifs avec des diagrammes en barres (y compris groupés / empilés), des diagrammes circulaires / en anneau, des balloon plots et des graphiques en mosaïque.
  • C’est la première étape avant tout test catégoriel (chi-deux, Fisher, …) — elle vous montre la forme de votre tableau avant de le tester.

Introduction

Avant de tester des données catégorielles, décrivez-les : combien d’observations tombent dans chaque catégorie, et comment les catégories de deux variables se croisent. Les résumés sont des effectifs — un tableau de fréquences à une entrée pour une seule variable, et un tableau de contingence à deux (ou plusieurs) entrées pour plusieurs. Cette leçon les construit avec R de base et les visualise, en utilisant les données de survie Titanic intégrées (titanic.raw).

Une variable catégorielle : le tableau de fréquences

table() compte chaque catégorie ; enveloppez-le dans prop.table() pour obtenir les proportions :

data("titanic.raw", package = "datarium")

table(titanic.raw$Survived)                 # counts

  No  Yes 
1490  711 
round(prop.table(table(titanic.raw$Survived)), 2)   # proportions

  No  Yes 
0.68 0.32 

Environ 32 % des 2201 personnes ont survécu.

Deux variables : un tableau de contingence

Croisez deux variables avec table() ou xtabs() — ici la survie selon la classe des passagers :

data("titanic.raw", package = "datarium")

tab <- xtabs(~ Class + Survived, data = titanic.raw)
tab
      Survived
Class   No Yes
  1st  122 203
  2nd  167 118
  3rd  528 178
  Crew 673 212

Ajoutez les marges (totaux par ligne / colonne / général) et les proportions :

data("titanic.raw", package = "datarium")
tab <- xtabs(~ Class + Survived, data = titanic.raw)

addmargins(tab)                       # totals
      Survived
Class    No  Yes  Sum
  1st   122  203  325
  2nd   167  118  285
  3rd   528  178  706
  Crew  673  212  885
  Sum  1490  711 2201
round(prop.table(tab, margin = 1), 2) # row proportions (survival rate within each class)
      Survived
Class    No  Yes
  1st  0.38 0.62
  2nd  0.59 0.41
  3rd  0.75 0.25
  Crew 0.76 0.24

Les proportions par ligne sont le taux de survie au sein de chaque classe — première classe ≈ 62 %, équipage ≈ 24 %.

Tableaux à plusieurs entrées

xtabs() et ftable() (tableaux à plat) gèrent trois variables ou plus — la survie selon la classe et le sexe :

data("titanic.raw", package = "datarium")

ftable(xtabs(~ Class + Sex + Survived, data = titanic.raw))
             Survived  No Yes
Class Sex                    
1st   Male            118  62
      Female            4 141
2nd   Male            154  25
      Female           13  93
3rd   Male            422  88
      Female          106  90
Crew  Male            670 192
      Female            3  20

Visualiser le tableau

Un diagramme en barres des effectifs, groupé par survie :

library(ggpubr)

data("titanic.raw", package = "datarium")
df <- as.data.frame(xtabs(~ Class + Survived, data = titanic.raw))

ggbarplot(df, x = "Class", y = "Freq", fill = "Survived", palette = "jco",
          position = position_dodge(0.8), ylab = "Count")

A grouped bar chart of passenger counts by class, coloured by survival; crew is the largest group and mostly did not survive.

Un balloon plot montre tout le tableau d’un coup d’œil — la taille du point = l’effectif :

library(ggpubr)

data("titanic.raw", package = "datarium")
df <- as.data.frame(xtabs(~ Class + Survived, data = titanic.raw))

ggballoonplot(df, x = "Survived", y = "Class", size = "Freq", fill = "Freq") +
  gradient_fill(c("white", "#3a86d4"))

A balloon plot of the class-by-survival table; the largest dots are crew who did not survive and the smaller survival counts across classes.

Un graphique en mosaïque (R de base) montre les proportions sous forme d’aires de tuiles — la largeur de chaque classe reflète sa taille, la subdivision montre son taux de survie :

data("titanic.raw", package = "datarium")
tab <- xtabs(~ Class + Survived, data = titanic.raw)

mosaicplot(tab, color = c("#cccccc", "#3a86d4"), main = "Survival by class")

A mosaic plot of class by survival; the crew column is widest, with a small survived portion, while first class has a larger survived portion.

Un diagramme circulaire ou en anneau convient aux parts d’une seule variable :

library(ggpubr)

data("titanic.raw", package = "datarium")
df <- as.data.frame(table(titanic.raw$Survived))
names(df) <- c("Survived", "n")

ggdonutchart(df, "n", label = "Survived", fill = "Survived", palette = "jco")

A donut chart of overall Titanic survival; about a third survived.

Essayez en direct

Tabulez et tracez un autre couple de variables — la survie selon le sexe. Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « résume mes données catégorielles — construis le tableau de contingence avec les proportions et les marges, et trace-le » — elle répond avec du code que vous pouvez exécuter sur vos propres données. The runtime is the judge. Demander à Prova →

Problèmes courants

Vous voulez des proportions mais vous obtenez des effectifs. Enveloppez le tableau dans prop.table(). Utilisez margin = 1 pour les proportions par ligne, margin = 2 pour les proportions par colonne, et aucune marge pour les proportions globales.

Votre variable est numérique mais en réalité catégorielle. Convertissez-la d’abord en facteur (mydata$x <- factor(mydata$x)) pour que table() traite chaque valeur comme une catégorie.

Un tableau à plusieurs entrées est difficile à lire. Utilisez ftable() pour l’aplatir en une mise en page lisible, ou un mosaicplot() pour voir les proportions visuellement.

Questions fréquentes

Utilisez table(var1, var2) ou xtabs(~ var1 + var2, data = mydata) pour croiser deux variables catégorielles en un tableau de contingence d’effectifs. Ajoutez prop.table() pour les proportions et addmargins() pour les totaux par ligne / colonne / général.

Enveloppez le tableau dans prop.table() : sans margin, vous obtenez les proportions globales ; margin = 1 donne les proportions par ligne (chaque ligne somme à 1), margin = 2 donne les proportions par colonne. Multipliez par 100 pour des pourcentages.

Un diagramme en barres pour comparer les effectifs de catégories (groupé ou empilé pour deux variables), un diagramme circulaire/en anneau pour les parts d’une variable, un balloon plot pour montrer tout un tableau de contingence d’un coup d’œil, et un graphique en mosaïque pour montrer les proportions sous forme d’aires. Choisissez selon le nombre de variables que vous présentez.

Testez vos connaissances

  1. Exécutez-le. Dans la cellule interactive, construisez le tableau sexe-par-survie et le taux de survie au sein de chaque sexe. Remplissez le blanc. Quel sexe a eu le taux de survie le plus élevé ?
  2. Conceptuel. Vous voulez le taux de survie au sein de chaque classe, pas des effectifs bruts. Quelle marge de prop.table() utilisez-vous ?

Remplissez le blanc avec 1 pour les proportions par ligne (taux au sein de chaque sexe). Pour la question 2, la classe est la variable de ligne, donc vous voulez la même marge.

tab <- xtabs(~ Sex + Survived, data = titanic.raw)
round(prop.table(tab, margin = 1), 2)   #> females had a much higher survival rate.

Pour la question 2 : utilisez margin = 1 (proportions par ligne) — avec la classe comme variable de ligne, cela donne le taux de survie au sein de chaque classe, ce qui est ce que vous voulez. margin = 2 donnerait plutôt, parmi les survivants et les non-survivants, la part de chaque classe.

AstuceEt ensuite ?

Une fois le tableau décrit, testez-le :

Conclusion

Vous savez maintenant décrire des données catégorielles en R : construire des tableaux de fréquences et de contingence avec table() / xtabs(), ajouter des proportions (prop.table()) et des marges (addmargins()), aplatir les tableaux à plusieurs entrées avec ftable(), et visualiser avec des diagrammes en barres, circulaires/en anneau, des balloon plots et des graphiques en mosaïque. C’est la première étape, essentielle — l’image du tableau que vous emmenez ensuite vers un test du chi-deux ou un autre test catégoriel.

Leçons connexes

Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série Analyse catégorielle en R — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

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

Passer à Pro →

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

Partager cette pageXLinkedInRedditHN
Note

Chaque résultat de cette page a été produit par le code montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Statistiques descriptives pour données catégorielles en R :
    tableaux de contingence},
  date = {2026-06-23},
  url = {https://www.datanovia.com/learn/biostatistics/categorical/categorical-descriptive-statistics-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Statistiques descriptives pour données catégorielles en R : tableaux de contingence.” 2026. June 23. https://www.datanovia.com/learn/biostatistics/categorical/categorical-descriptive-statistics-in-r.