Long-Format zu Wide-Format umwandeln in R

von | Zuletzt bearbeitet am: Oct 13, 2022 | R

1 Long-Format

Im “long”-Format stehen Messwiederholungen untereinander. Das hat allerdings Nachteile bei der Vergleichbarkeit der Werte über die Probanden hinweg. Viele Analyseprozeduren in R verwenden das long-Format bei Messwiederholungen. Allerdings kann es notwendig sein, vor dem Export in z.B. SPSS oder Excel die Daten ins wide-Format zu transponieren. Für die Umkehrung (wide- zu long-Format) siehe diesen Artikel.

 

2 Ein Beispieldatensatz


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

Ein kleines Tutorial zum Importieren von Daten findet ihr hier.

 

3 Umwandlung mit dem tidyr-Paket

Eine recht rudimentäre und zugleich unkomplizierte 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 spread()-Funktion

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

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

  • Name des ursprünglichen Dataframes (hier: data_long),
  • Name der neuen Zeitpunktvariable (hier: t – die Ausprägungen werden als neue Variablennamen verwendet (t0, t10, t20)),
  • Name der neuen Wertvariable (hier: v) und

 


data_wide <- spread(data_long, t, v)

 

Das Ergebnis sieht wie folgt aus:


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

 

3.2 Verwenden der pivot_wider()-Funktion

Die pivot_wider()-Funktion gibt es auch im tidyr-Paket und führt exakt die gleiche Transformation von wide-format zu long-format durch. Ich muss die Datenquelle angeben und zusätzlich welche Variablennamen/Spaltennamen, für die Messwerte und die Zeitpunkt stehen. In der Spalte t stehen immer noch die Zeitpunktbezeichner, weswegen ich die Namen daher bekomme. Die Messwerte stehen in v.
Im Code schreibe ich erneut lediglich eine Zeile:


data_wide_tidy <- pivot_wider(data_long,  names_from = t, values_from = v)

 

Im Ergebnis bekomme ich die Daten im wide-Format, analog zur obigen Umwandlung:


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
...     ...     ...

 

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