Von Long zu Wide mit pivot_wider()
Überführen Sie Schlüssel-Wert-Paare zurück in Tabellen im Wide-Format.
Von Long zu Wide mit pivot_wider() ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Wann Sie das breite Format verwenden sollten
Während sich das lange Format für Analysen eignet, wird das breite Format häufig für Berichte, Tabellenkalkulationen und bestimmte Algorithmen benötigt (z. B. Korrelationsmatrizen). pivot_wider() ist das Gegenstück zu pivot_longer() — die Funktion verteilt Werte aus einer Spalte auf mehrere neue Spalten.
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')Grundlagen von pivot_wider()
pivot_wider(df, names_from, values_from) wandelt das lange in das breite Format um. names_from gibt die Spalte an, deren Werte zu neuen Spaltennamen werden; values_from gibt die Spalte an, deren Werte diese neuen Spalten füllen.
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 — Zeilenschlüssel festlegen
id_cols gibt an, welche Spalten jede Zeile in der breiten Ausgabe eindeutig identifizieren. Standardmäßig verwendet dplyr alle Spalten, die nicht in names_from oder values_from angegeben sind. Durch eine explizite Festlegung verhindern Sie unerwartete Gruppierungen.
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 — Fehlende Kombinationen behandeln
Wenn einige Kombinationen aus id_cols und names_from nicht vorhanden sind, wäre die entsprechende Zelle NA. Verwenden Sie values_fill, um diese fehlenden Werte durch einen Standardwert zu ersetzen, beispielsweise 0 für Zählungen oder Summen.
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 — Präfixe hinzufügen
Verwenden Sie names_prefix, um allen neuen Spaltennamen eine Zeichenkette voranzustellen. Dadurch vermeiden Sie Probleme, wenn die Werte in names_from Zahlen sind, oder können Spaltennamen aussagekräftiger gestalten.
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'
)Mehrere values_from-Spalten
Sie können mehrere Wertespalten gleichzeitig umformen, indem Sie einen Vektor an values_from übergeben. Die resultierenden Spalten werden nach dem Muster value_name benannt und kombinieren den Namen der Wertespalte mit der Kategorie.
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)
)Duplikate mit values_fn behandeln
Wenn für dieselbe Kombination aus id und name mehrere Werte vorhanden sind, weiß pivot_wider nicht, welchen Wert es verwenden soll, und gibt mit einer Warnung eine Listenspalte zurück. Verwenden Sie values_fn, um dies durch Angabe einer Aggregationsfunktion aufzulösen.
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 mit einer benannten Liste
Übergeben Sie eine benannte Liste an values_fn, um gleichzeitig unterschiedliche Aggregationsfunktionen auf verschiedene Wertespalten anzuwenden. Das ist besonders leistungsfähig, wenn Sie mehrere Wertespalten umformen, für die unterschiedliche Zusammenfassungsmethoden erforderlich sind.
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)
)Kreuztabellen erstellen
Eine Kreuztabelle (Kontingenztabelle) in Form eines Data Frames lässt sich nach dem Zählen mit dplyr::count() einfach mithilfe von pivot_wider() erstellen. Dadurch verbinden Sie die Leistungsfähigkeit beider Pakete für die Häufigkeitsanalyse.
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
)Hin und zurück: Long → Wide → Long
Wenn Sie die umgekehrte Beziehung zwischen pivot_longer() und pivot_wider() verstehen, können Sie Fehler leichter erkennen. Eine Hin-und-zurück-Umformung (long->wide->long) sollte die ursprünglichen Daten zurückgeben, abgesehen von der Zeilenreihenfolge und möglichen Typumwandlungen.
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')Praxisbeispiel: Notenbericht
Ein typischer Anwendungsfall: Wandeln Sie eine lange Tabelle mit Testergebnissen in eine Berichtstabelle um, die Schüler nach Fächern aufschlüsselt. Kombinieren Sie dies mit dplyr::arrange() und rename(), um eine übersichtliche, präsentationsfertige Ausgabe zu erstellen.
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))Schnelltest
Was passiert, wenn Sie pivot_wider() aufrufen und mehrere Werte für dieselbe Kombination aus id und name vorhanden sind?
Zusammenfassung: pivot_wider()
Wichtige Punkte zur Umwandlung von Long- in Wide-Form:
pivot_wider(names_from, values_from)verteilt eine Schlüsselspalte auf mehrere neue Spaltenid_colslegt fest, welche Spalten die einzelnen Zeilen identifizierenvalues_fill = 0(oder ein beliebiger Skalar) füllt fehlende Kombinationen aufnames_prefixstellt eine Zeichenkette voran, um numerische oder mehrdeutige Spaltennamen zu vermeidenvalues_fnlöst doppelte Zellwerte mithilfe einer Aggregationsfunktion auf- Übergeben Sie einen Vektor an
values_from, um mehrere Wertespalten gleichzeitig umzuformen - Verwenden Sie dies nach
count(), um effizient Kreuztabellen zu erstellen
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)Häufig gestellte Fragen
Ist die Lektion „Von Long zu Wide mit pivot_wider()“ kostenlos?
Ja — der vollständige Text von „Von Long zu Wide mit pivot_wider()“ 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 Long zu Wide mit pivot_wider()“?
Überführen Sie Schlüssel-Wert-Paare zurück in Tabellen im Wide-Format. 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 2 von 4.
Wie lange dauert die Lektion „Von Long zu Wide mit pivot_wider()“?
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