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.
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 : pivot_longer()
Points essentiels pour convertir un format large en format long :
pivot_longer(df, cols, names_to, values_to)est la fonction principalecolsaccepte tidyselect :starts_with(),-id_col,c('a','b')names_prefixsupprime une chaîne initiale des noms de colonnesnames_transformconvertit le type de la colonne des noms, par exemple en entiervalues_drop_na = TRUEsupprime 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'
)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
- Du format large au format long avec pivot_longer()
- Du format long au format large avec pivot_wider()
- separate() et unite() pour les colonnes de chaînes
- Imbriquer et désimbriquer des data frames