R Academy · Leçon

Du format long au format large avec pivot_wider()

Redéployez les paires clé-valeur dans des tableaux au format large.

Leçon 2 sur 413 étapes

Du format long au format large avec pivot_wider() est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.

Quand utiliser le format large

Bien que le format long soit adapté à l’analyse, le format large est souvent nécessaire pour les rapports, les feuilles de calcul et certains algorithmes (par exemple les matrices de corrélation). pivot_wider() est l’inverse de pivot_longer() : il répartit les valeurs d’une colonne dans plusieurs nouvelles colonnes.

library(tidyr)

# Long format: one row per student-quarter combination
long_df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
  quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
  score = c(85, 88, 92, 90, 85, 88)
)

print(long_df)
cat('\n', nrow(long_df), 'rows x', ncol(long_df), 'cols')

Bases de pivot_wider()

pivot_wider(df, names_from, values_from) convertit le format long en format large. names_from indique la colonne dont les valeurs deviennent les nouveaux noms de colonnes ; values_from indique la colonne dont les valeurs remplissent ces nouvelles colonnes.

library(tidyr)

long_df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
  quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
  score = c(85, 88, 92, 90, 85, 88)
)

wide_df <- pivot_wider(
  long_df,
  names_from = quarter,
  values_from = score
)

print(wide_df)

id_cols — Identifier les clés des lignes

id_cols indique les colonnes qui identifient de manière unique chaque ligne dans la sortie au format large. Par défaut, dplyr utilise toutes les colonnes qui ne sont pas indiquées dans names_from ou values_from. Le définir explicitement évite les regroupements inattendus.

library(tidyr)

df <- data.frame(
  year = c(2023,2023,2024,2024),
  region = c('East','West','East','West'),
  quarter = c('Q1','Q1','Q1','Q1'),
  revenue = c(100, 200, 120, 220)
)

pivot_wider(
  df,
  id_cols = c(year, quarter),
  names_from = region,
  values_from = revenue
)

values_fill — Gestion des combinaisons manquantes

Lorsque certaines combinaisons de id_cols et names_from n'existent pas, la cellule obtenue contiendrait NA. Utilisez values_fill pour remplacer ces valeurs manquantes par une valeur par défaut (par exemple, 0 pour des comptages ou des sommes).

library(tidyr)

df <- data.frame(
  product = c('A','A','B'),
  channel = c('online','store','online'),
  sales = c(100, 150, 200)
)

# 'B' has no 'store' data — fill with 0
pivot_wider(
  df,
  names_from = channel,
  values_from = sales,
  values_fill = 0
)

names_prefix — Ajout de préfixes

Utilisez names_prefix pour ajouter une chaîne au début de tous les nouveaux noms de colonnes. Cela évite les problèmes lorsque les valeurs de names_from sont des nombres ou lorsque vous souhaitez rendre les noms de colonnes plus descriptifs.

library(tidyr)

df <- data.frame(
  student = c('Alice','Alice','Bob','Bob'),
  quarter = c(1, 2, 1, 2),
  score = c(85, 90, 78, 82)
)

# Without prefix: columns named '1' and '2' (problematic)
# With prefix: q1, q2
pivot_wider(
  df,
  names_from = quarter,
  values_from = score,
  names_prefix = 'q'
)

Plusieurs colonnes values_from

Vous pouvez transformer plusieurs colonnes de valeurs à la fois en transmettant un vecteur à values_from. Les colonnes obtenues sont nommées sous la forme value_name, en combinant le nom de la colonne de valeurs et la catégorie.

library(tidyr)

df <- data.frame(
  region = c('East','East','West','West'),
  period = c('Q1','Q2','Q1','Q2'),
  revenue = c(100, 120, 200, 210),
  units = c(10, 12, 20, 22)
)

pivot_wider(
  df,
  names_from = period,
  values_from = c(revenue, units)
)

Gestion des doublons avec values_fn

S'il existe plusieurs valeurs pour la même combinaison id + name, pivot_wider ne sait pas laquelle utiliser et renvoie une colonne de listes avec un avertissement. Utilisez values_fn pour résoudre ce problème en indiquant une fonction d'agrégation.

library(tidyr)

# Duplicate rows: Alice has two Q1 scores
df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob'),
  quarter = c('Q1','Q1','Q2','Q1','Q2'),
  score = c(85, 87, 90, 78, 82)
)

# Resolve duplicates by taking the mean
pivot_wider(
  df,
  names_from = quarter,
  values_from = score,
  values_fn = mean
)

values_fn avec une liste nommée

Transmettez une liste nommée à values_fn pour appliquer simultanément différentes fonctions d'agrégation à différentes colonnes de valeurs. Cette approche est particulièrement utile lorsque vous transformez plusieurs colonnes de valeurs qui nécessitent des méthodes de synthèse différentes.

library(tidyr)

df <- data.frame(
  region = c('East','East','West','West'),
  period = c('Q1','Q1','Q1','Q1'),
  revenue = c(100, 120, 200, 210),
  orders = c(10, 12, 20, 22)
)

pivot_wider(
  df,
  names_from = period,
  values_from = c(revenue, orders),
  values_fn = list(revenue = sum, orders = sum)
)

Créer des tableaux croisés

Un tableau croisé (tableau de contingence) sous forme de trame de données se crée facilement avec pivot_wider() après un comptage avec dplyr::count(). Cela combine la puissance des deux paquets pour analyser les fréquences.

library(tidyr)
library(dplyr)

survey <- data.frame(
  dept = c('HR','HR','Eng','Eng','HR','Eng'),
  response = c('Yes','No','Yes','Yes','Yes','No')
)

survey %>%
  count(dept, response) %>%
  pivot_wider(
    names_from = response,
    values_from = n,
    values_fill = 0
  )

Aller-retour : Longueurs -> Largeurs -> Longueurs

Comprendre la relation inverse entre pivot_longer() et pivot_wider() aide à détecter les erreurs. Un aller-retour (longue->large->longue) doit renvoyer les données d'origine (à l'ordre des lignes et aux conversions de types près).

library(tidyr)

original_long <- data.frame(
  id = c(1,1,2,2),
  key = c('a','b','a','b'),
  value = c(10, 20, 30, 40)
)

# Go wide
wide <- pivot_wider(original_long, names_from=key, values_from=value)
print(wide)

# Go long again
pivot_longer(wide, -id, names_to='key', values_to='value')

Pratique : rapport de scores

Cas d'utilisation courant : prendre une table longue de résultats de tests et la restructurer en table de rapport organisée par étudiant et par matière. Combinez cette opération avec dplyr::arrange() et rename() pour produire un résultat propre, prêt à être présenté.

library(tidyr)
library(dplyr)

scores <- data.frame(
  student = c('Alice','Alice','Bob','Bob','Carol','Carol'),
  subject = c('Math','Science','Math','Science','Math','Science'),
  score = c(92, 88, 85, 91, 79, 83)
)

scores %>%
  pivot_wider(names_from=subject, values_from=score) %>%
  mutate(average = round((Math + Science) / 2, 1)) %>%
  arrange(desc(average))

Vérification rapide

Que se passe-t-il lorsque vous appelez pivot_wider() et qu'il existe plusieurs valeurs pour la même combinaison id + name ?

Récapitulatif : pivot_wider()

Points essentiels de la conversion d'un format long en format large :

  • pivot_wider(names_from, values_from) transforme une colonne clé en plusieurs nouvelles colonnes
  • id_cols indique les colonnes qui identifient chaque ligne
  • values_fill = 0 (ou tout scalaire) remplit les combinaisons manquantes
  • names_prefix ajoute une chaîne au début des noms pour éviter les noms de colonnes numériques ou ambigus
  • values_fn résout les valeurs de cellules en doublon avec une fonction d'agrégation
  • Transmettez un vecteur à values_from pour transformer simultanément plusieurs colonnes de valeurs
  • Utilisez cette fonction après count() pour créer efficacement des tableaux croisés
library(tidyr)
library(dplyr)

data.frame(
  region = c('East','East','West','West'),
  metric = c('revenue','units','revenue','units'),
  value = c(100, 10, 200, 20)
) %>%
  pivot_wider(
    names_from = metric,
    values_from = value,
    values_fill = 0
  ) %>%
  mutate(revenue_per_unit = revenue / units)
Gratuit pour commencer

Apprends R avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
43
Leçons
159

Questions Fréquemment Posées

La leçon « Du format long au format large avec pivot_wider() » est-elle gratuite ?

Oui — le texte complet de « Du format long au format large avec pivot_wider() » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Du format long au format large avec pivot_wider() » ?

Redéployez les paires clé-valeur dans des tableaux au format large. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer R Academy ?

Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Du format long au format large avec pivot_wider() » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon R Academy ?

Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Du format large au format long avec pivot_longer()
  2. Du format long au format large avec pivot_wider()
  3. separate() et unite() pour les colonnes de chaînes
  4. Imbriquer et désimbriquer des data frames
← Retour à R Academy