Wide-Format zu Long-Format umwandeln in R

von | Zuletzt bearbeitet am: Mar 9, 2024 | R

1 Wide-Format

Im “wide”-Format stehen Messwiederholungen nebeneinander. Das hat vor allem Vorteile bei der Vergleichbarkeit der Werte über die Probanden hinweg. Zusätzlich ist es so einfacher Daten einzugeben, wenn dies noch händisch vorgenommen wird bzw. werden muss. In R verlangen allerdings viele Analyseprozeduren nach dem long-Format. Deshalb ist eine Umwandlung von wide-Format in long-Format notwendig. Den umgedrehten Fall (Long-Format zu Wide-Format) gibt es in diesem Artikel.

 

2 Ein Beispieldatensatz


Proband	t0	t10	t20
A	28	42	48
B	5	10	17
C	23	26	28
D	20	30	25
E	16	24	27
F	22	28	35
G	8	12	18
H	11	15	21
I	7	9	20
J	17	23	46
K	9	24	54
L	29	39	49
M	34	56	59
N	34	51	50
O	14	24	27
P	21	28	30
Q	21	29	25

Ein kleines Tutorial zum Importieren von Daten findet ihr hier.

 

3 Umwandlung mit dem tidyr-Paket

Eine recht rudimentäre und zugleich einfache Möglichkeit bietet das sog. tidyr-Paket. Dies kann mittels install.packages(“tidyr”) installiert und mit library(tidyr) geladen werden.


install.packages("tidyr")
library(tidyr)

Nun hat man Zugriff auf verschiedene Funktionen, die im Ergebnis alle das Gleiche machen.

 

3.1 Verwenden der gather()-Funktion

Die einfachste Art und Weise der Umwandlung von wide- in long-Format gelingt mit der gather()-Funktion aus dem tidyr-Paket. Die Funktion wird als “retired” bezeichnet – sie funktioniert ohne Probleme, wird aber nicht länger erweitert und gewartet. Sie ist durch die pivot_longer()-Funktion abgelöst, allerdings finde ich sie persönlich etwas umständlicher als die gather()-Funktion, weshalb ich dieses Vorgehen zeige.

Zunächst wird ein neuer Dataframe definiert. Der heißt in meinem Falle data_long. Der verwendet die gather()-Funktion und im einfachsten Fall 3 Argumente.
In der Reihenfolge ihrer Verwendung:

  • Name des ursprünglichen Dataframes (hier: data),
  • Name der neuen Zeitpunktvariable (hier: t, kann beliebig gewählt werden),
  • Name der neuen Wertvariable (hier: v, kann beliebig gewählt werden) und
  • Quelle der Werte, die in die Wertevariable übertragen werden (Werte zu den Zeitpunkten, hier t0, t10 und t20, geschrieben als “t0:t20”)

 


data_long <- gather(data, t, v, t0:t20)

 

Das Ergebnis sieht wie folgt aus:


Proband	t	v
A	t0	28
B	t0	5
C	t0	23
D	t0	20
E	t0	16
F	t0	22
G	t0	8
H	t0	11
I	t0	7
J	t0	17
K	t0	9
L	t0	29
M	t0	34
N	t0	34
O	t0	14
P	t0	21
Q	t0	21
A	t10	42
B	t10	10
C	t10	26
D	t10	30
E	t10	24
F	t10	28
G	t10	12
H	t10	15
I	t10	9
J	t10	23
K	t10	24
L	t10	39
M	t10	56
N	t10	51
O	t10	24
P	t10	28
Q	t10	29
A	t20	48
B	t20	17
C	t20	28
D	t20	25
E	t20	27
F	t20	35
G	t20	18
H	t20	21
I	t20	20
J	t20	46
K	t20	54
L	t20	49
M	t20	59
N	t20	50
O	t20	27
P	t20	30
Q	t20	25

 

3.2 Verwenden der pivot_longer()-Funktion

Die pivot_longer()-Funktion befindet sich ebenfalls im tidyr-Paket und macht grundsätzlich exakt die gleiche Transformation von wide-format zu long-format. Ich muss die Datenquelle angeben und zusätzlich die Variablennamen/Spaltennamen, die die Messwerte enthalten. Erneut ist es bei mir t0:t20 (t0 bis t20), in denen die Messungen zu den verschiedenen Zeitpunkten stehen.
Im Code schreibe ich erneut lediglich eine Zeile:


data_long_tidy <- pivot_longer(data, t0:t20)

 

Im Ergebnis bekomme ich die Daten im long-Format, allerdings mit dem Unterschied einer Vorsortierung der ersten Spalte (hier: Probandennummer). Es steht nun also 3-mal der Proband A untereinander:


Proband name    value
A	t0	28
A	t10	42
A	t20	48
B	t0	5
B	t10	10
B	t20	17
...     ...     ...

 

Diese Sortierung kann natürlich angepasst werden, stört aber bei der Auswertung nicht weiter

Möchte man zusätzlich die Spaltennamen ändern, geht dies recht einfach mit den Argumenten "names_to" und "values_to". Aus name wird die Abkürzung "t" und aus value die Abkürzung "v". Die Bezeichnungen können freilich beliebig sein, kürzer spart aber stets Aufwand.


data_long_tidy <- pivot_longer(data_wide, t0:t20, names_to = "t", values_to = "v")

 

4 Video/h2>

Hat dir der Beitrag geholfen?

Dann würde ich mich über eine kleine Spende freuen, die es mir erlaubt, weiterhin kostenfreie Inhalte zu veröffentlichen.
Alternativ kannst du über meinen Amazon Affiliate-Link einkaufen – ohne Zusatzkosten.

Vielen Dank und viel Erfolg!

Über mich

Björn Walther

Ein 💚 für Statistik & Datenanalyse

Excel Online-Kurs

YouTube-Kanal

Inhalt