Long-Format zu Wide-Format umwandeln in R

von | Jan 3, 2021 | R

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.

 

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.

 

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.

 

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

 

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

 

Video/h2>
Dieses Video ansehen auf YouTube.

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.

Vielen Dank und viel Erfolg!

Über mich

Björn Walther

Excel- und SPSS-Experte

YouTube-Kanal

Excel Online-Kurs

YouTube-Kanal