R Academy · Leçon

Du format large au format long avec pivot_longer()

Remodelez des tableaux au format large en tableaux au format long et tidy pour l’analyse.

Leçon 1 sur 413 étapes

Du format large au format long avec pivot_longer() est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.

Formats de données large et long

Les données peuvent être stockées au format large (une ligne par sujet, plusieurs colonnes de valeurs) ou au format long (une ligne par observation, une colonne pour le nom de la variable et une autre pour sa valeur). De nombreux paquets R de visualisation et de modélisation attendent des données au format long.

library(tidyr)
library(dplyr)

# Wide format: each quarter is a column
wide_df <- data.frame(
  student = c('Alice','Bob','Carol'),
  q1 = c(85, 90, 78),
  q2 = c(88, 85, 80),
  q3 = c(92, 88, 84)
)

print(wide_df)
cat('\nShape:', nrow(wide_df), 'rows x', ncol(wide_df), 'cols')

Bases de pivot_longer()

pivot_longer(df, cols, names_to, values_to) convertit le format large en format long. cols indique les colonnes à faire pivoter, names_to est la nouvelle colonne destinée aux anciens noms de colonnes et values_to est la nouvelle colonne destinée aux valeurs.

library(tidyr)

wide_df <- data.frame(
  student = c('Alice','Bob','Carol'),
  q1 = c(85, 90, 78),
  q2 = c(88, 85, 80),
  q3 = c(92, 88, 84)
)

long_df <- pivot_longer(
  wide_df,
  cols = c(q1, q2, q3),
  names_to = 'quarter',
  values_to = 'score'
)

print(long_df)

Sélectionner des colonnes avec starts_with()

Au lieu d’énumérer explicitement les colonnes, utilisez les assistants tidyselect dans cols. starts_with('prefix'), ends_with('suffix') et contains('string') sont particulièrement utiles pour faire pivoter de manière cohérente des colonnes aux noms similaires.

library(tidyr)

df <- data.frame(
  id = 1:3,
  sales_jan = c(100, 200, 150),
  sales_feb = c(120, 180, 160),
  sales_mar = c(130, 190, 170)
)

# Select all sales_ columns automatically
pivot_longer(
  df,
  cols = starts_with('sales_'),
  names_to = 'month',
  values_to = 'sales'
)

Exclure des colonnes avec -col

Autre possibilité : indiquez les colonnes à exclure du pivotement à l’aide de -col_name. Toutes les autres colonnes seront pivotées. Cette méthode est pratique lorsque vous n’avez qu’une ou deux colonnes d’identifiants et de nombreuses colonnes de valeurs.

library(tidyr)

df <- data.frame(
  region = c('East','West'),
  jan = c(100, 200),
  feb = c(110, 210),
  mar = c(120, 220),
  apr = c(130, 230)
)

# Pivot everything except 'region'
pivot_longer(df, cols = -region, names_to = 'month', values_to = 'revenue')

names_prefix — Supprimer des préfixes

Lorsque les noms de colonnes possèdent un préfixe comme score_q1 ou score_q2, l’argument names_prefix supprime ce préfixe de la colonne names_to résultante. L’identifiant reste ainsi propre.

library(tidyr)

df <- data.frame(
  id = 1:3,
  score_q1 = c(85, 90, 78),
  score_q2 = c(88, 85, 80),
  score_q3 = c(92, 88, 84)
)

pivot_longer(
  df,
  cols = starts_with('score_'),
  names_to = 'quarter',
  names_prefix = 'score_',
  values_to = 'score'
)

Faire pivoter plusieurs ensembles de colonnes

Lorsque vous disposez de plusieurs groupes de colonnes de valeurs (par exemple sales_q1 et cost_q1), utilisez names_to avec plusieurs valeurs et names_pattern pour décomposer les noms de colonnes en plusieurs parties.

library(tidyr)

df <- data.frame(
  id = 1:2,
  sales_q1 = c(100, 200),
  sales_q2 = c(110, 210),
  cost_q1 = c(60, 110),
  cost_q2 = c(65, 115)
)

pivot_longer(
  df,
  cols = -id,
  names_to = c('.value', 'quarter'),
  names_pattern = '(.+)_(q[0-9]+)'
)

names_transform — Convertir les types

Par défaut, la nouvelle colonne des noms est de type caractère. Utilisez names_transform pour convertir automatiquement cette colonne vers un autre type (par exemple, une année entière à partir de noms de colonnes comme y2020 et y2021).

library(tidyr)

df <- data.frame(
  product = c('A','B'),
  y2021 = c(100, 200),
  y2022 = c(110, 210),
  y2023 = c(120, 220)
)

result <- pivot_longer(
  df,
  cols = -product,
  names_to = 'year',
  names_prefix = 'y',
  names_transform = list(year = as.integer),
  values_to = 'sales'
)

print(result)
cat('year column type:', class(result$year))

values_drop_na — Supprimer les valeurs manquantes

Lorsque le format large contient des valeurs manquantes pour certaines combinaisons colonne-ligne, elles apparaissent sous la forme NA dans le format long. Définissez values_drop_na = TRUE pour supprimer automatiquement les lignes dont la valeur est NA.

library(tidyr)

df <- data.frame(
  student = c('Alice','Bob','Carol'),
  q1 = c(85, NA, 78),
  q2 = c(88, 85, NA),
  q3 = c(NA, 88, 84)
)

# Without drop: 9 rows including NAs
pivot_longer(df, -student, names_to='quarter', values_to='score',
             values_drop_na = TRUE)

Le format long facilite l’utilisation de ggplot2

La raison la plus importante de convertir les données au format long est la suivante : ggplot2 associe les propriétés esthétiques aux colonnes. Lorsque toutes les valeurs se trouvent dans une colonne et leurs catégories dans une autre, vous pouvez utiliser facilement color = quarter ou facet_wrap(~quarter).

library(tidyr)
# (ggplot2 not run here, but showing the data preparation)

df <- data.frame(
  month = c('Jan','Feb','Mar'),
  product_A = c(100, 120, 110),
  product_B = c(200, 190, 210)
)

# After pivoting, ready for ggplot2:
long_df <- pivot_longer(df, -month, names_to='product', values_to='sales')
print(long_df)
# ggplot(long_df, aes(x=month, y=sales, color=product)) + geom_line()

Faire pivoter des colonnes aux noms numériques

Parfois, les noms de colonnes sont composés uniquement de nombres (par exemple des années : 2020, 2021). Dans R, les noms de colonnes numériques sont placés entre guillemets dans les cadres de données. Utilisez num_range('', 2020:2023) ou des accents graves dans l’argument cols pour les traiter.

library(tidyr)

# Year columns as numbers (common in census-style data)
df <- data.frame(
  country = c('US','UK'),
  '2021' = c(100, 80),
  '2022' = c(110, 85),
  '2023' = c(120, 90),
  check.names = FALSE
)

pivot_longer(
  df,
  cols = c('2021','2022','2023'),
  names_to = 'year',
  values_to = 'gdp_index'
)

Comparer les résultats du pivotement

Après le pivotement, validez votre résultat : le nombre de lignes doit être égal à nrow(wide) * n_pivoted_cols, et les valeurs uniques de la colonne names_to doivent correspondre aux noms de colonnes d’origine, moins le préfixe s’il a été supprimé.

library(tidyr)

wide <- data.frame(
  id = 1:4,
  jan = c(10,20,30,40),
  feb = c(11,21,31,41),
  mar = c(12,22,32,42)
)

long <- pivot_longer(wide, -id, names_to='month', values_to='value')

cat('Wide rows:', nrow(wide), '\n')
cat('Long rows:', nrow(long), '(expected', nrow(wide)*3, ')\n')
cat('Months:', paste(unique(long$month), collapse=', '), '\n')

Vérification rapide

Que fait l’argument names_prefix dans pivot_longer() ?

Récapitulatif&nbsp;: pivot_longer()

Points essentiels pour convertir un format large en format long :

  • pivot_longer(df, cols, names_to, values_to) est la fonction principale
  • cols accepte tidyselect : starts_with(), -id_col, c('a','b')
  • names_prefix supprime une chaîne initiale des noms de colonnes
  • names_transform convertit le type de la colonne des noms, par exemple en entier
  • values_drop_na = TRUE supprime automatiquement les lignes contenant NA
  • Le format long est requis par ggplot2, la plupart des fonctions de modélisation et les tests statistiques
  • Validez le résultat : lignes au format long = lignes au format large × nombre de colonnes pivotées
library(tidyr)

df <- data.frame(
  team = c('Alpha','Beta'),
  sales_2022 = c(100, 200),
  sales_2023 = c(120, 220),
  sales_2024 = c(140, 240)
)

pivot_longer(
  df,
  cols = starts_with('sales_'),
  names_to = 'year',
  names_prefix = 'sales_',
  names_transform = list(year = as.integer),
  values_to = 'revenue'
)
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 large au format long avec pivot_longer() » est-elle gratuite ?

Oui — le texte complet de « Du format large au format long avec pivot_longer() » 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 large au format long avec pivot_longer() » ?

Remodelez des tableaux au format large en tableaux au format long et tidy pour l’analyse. 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 1 sur 4.

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

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