Website-Icon Björn Walther

Long-Format zu Wide-Format umwandeln in 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:

 


data_wide 

 

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 

 

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>
https://www.youtube.com/watch?v=iP2GPwXhIdE/

Die mobile Version verlassen