Inhaltsverzeichnis
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")