Von Wide zu Long mit pivot_longer()
Formen Sie Tabellen vom Wide-Format für die Analyse in das aufgeräumte Long-Format um.
Von Wide zu Long mit pivot_longer() ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Breite und lange Datenformate
Daten können im breiten Format (eine Zeile pro Untersuchungseinheit, mehrere Wertespalten) oder im langen Format (eine Zeile pro Beobachtung, eine Spalte für den Variablennamen und eine weitere für den Wert) gespeichert werden. Viele R-Pakete für Visualisierung und Modellierung erwarten das lange Format.
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')Grundlagen von pivot_longer()
pivot_longer(df, cols, names_to, values_to) wandelt das breite in das lange Format um. cols gibt an, welche Spalten umgeformt werden sollen, names_to ist die neue Spalte für die alten Spaltennamen und values_to ist die neue Spalte für die Werte.
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)Spalten mit starts_with() auswählen
Statt Spalten ausdrücklich aufzulisten, können Sie innerhalb von cols tidyselect-Hilfsfunktionen verwenden. starts_with('prefix'), ends_with('suffix') und contains('string') sind besonders nützlich, um konsistent benannte Spalten umzuwandeln.
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'
)Spalten mit -col ausschließen
Eine weitere Möglichkeit besteht darin, mit -col_name anzugeben, welche Spalten von der Umwandlung ausgeschlossen werden sollen. Alle übrigen Spalten werden umgewandelt. Das ist praktisch, wenn Sie nur eine oder zwei ID-Spalten und viele Wertespalten haben.
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 — Präfixe entfernen
Wenn Spaltennamen ein Präfix wie score_q1 oder score_q2 haben, entfernt das Argument names_prefix dieses Präfix aus der resultierenden Spalte names_to. Dadurch bleibt der Bezeichner übersichtlich.
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'
)Mehrere Spaltengruppen umwandeln
Wenn Sie mehrere Gruppen von Wertespalten haben (z. B. sowohl sales_q1 als auch cost_q1), verwenden Sie names_to mit mehreren Werten und names_pattern, um die Spaltennamen in Bestandteile aufzuteilen.
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 — Typen umwandeln
Standardmäßig ist die neue Namensspalte vom Typ Zeichenkette. Verwenden Sie names_transform, um die Namensspalte automatisch in einen anderen Typ umzuwandeln (z. B. das Jahr aus Spaltennamen wie y2020 und y2021 in eine Ganzzahl).
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 — Fehlende Werte entfernen
Wenn das breite Format für einige Spalten-Zeilen-Kombinationen fehlende Werte enthält, erscheinen diese im langen Format als NA. Setzen Sie values_drop_na = TRUE, um Zeilen mit dem Wert NA automatisch zu entfernen.
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)Das lange Format ermöglicht ggplot2
Der wichtigste Grund für die Umwandlung in das lange Format: ggplot2 ordnet Ästhetiken anhand von Spalten zu. Wenn sich alle Werte in einer Spalte und ihre Kategorien in einer anderen befinden, können Sie mühelos color = quarter oder facet_wrap(~quarter) verwenden.
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()Umwandlung mit numerischen Spaltennamen
Manchmal bestehen Spaltennamen ausschließlich aus Zahlen (z. B. Jahre: 2020, 2021). In R werden numerische Spaltennamen in Data Frames in Anführungszeichen gesetzt. Verwenden Sie num_range('', 2020:2023) oder setzen Sie im Argument cols Backticks, um sie zu verarbeiten.
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'
)Ergebnisse der Umwandlung vergleichen
Überprüfen Sie nach der Umwandlung das Ergebnis: Die Zeilenanzahl sollte nrow(wide) * n_pivoted_cols entsprechen, und die eindeutigen Werte in der Spalte names_to sollten mit den ursprünglichen Spaltennamen übereinstimmen (abzüglich des entfernten Präfixes).
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')Schnelltest
Was bewirkt das Argument names_prefix in pivot_longer()?
Zusammenfassung: pivot_longer()
Die wichtigsten Punkte zur Umwandlung vom breiten ins lange Format:
pivot_longer(df, cols, names_to, values_to)ist die zentrale Funktioncolsakzeptiert tidyselect:starts_with(),-id_col,c('a','b')names_prefixentfernt eine führende Zeichenkette aus Spaltennamennames_transformwandelt den Typ der Namensspalte um (z. B. in eine Ganzzahl)values_drop_na = TRUEentfernt NA-Zeilen automatisch- Das lange Format wird von ggplot2, den meisten Modellierungsfunktionen und statistischen Tests benötigt
- Überprüfung: Zeilen im langen Format = Zeilen im breiten Format × Anzahl der umgewandelten Spalten
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'
)Lerne R mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 43
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „Von Wide zu Long mit pivot_longer()“ kostenlos?
Ja — der vollständige Text von „Von Wide zu Long mit pivot_longer()“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Von Wide zu Long mit pivot_longer()“?
Formen Sie Tabellen vom Wide-Format für die Analyse in das aufgeräumte Long-Format um. Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um R Academy zu starten?
Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Von Wide zu Long mit pivot_longer()“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?
Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Von Wide zu Long mit pivot_longer()
- Von Long zu Wide mit pivot_wider()
- separate() und unite() für String-Spalten
- Data Frames verschachteln und entpacken