15 Daten kombinieren und kodieren
Das Kombinieren und kodieren von Daten haben in R eine enge Beziehung. Die notwendigen Funktionen werden durch die tidyverse
-Bibliothek dplyr
(Wickham et al., 2023) bereitgestellt.
15.1 Kombinieren
15.1.1 Konkatenation
Die Bibliothek dplyr
stellt zwei Funktionen zur Konkatenation von Datenrahmen bereit:
- Die Funktion
bind_rows()
und - Die Funktion
bind_cols()
Die Funktion bind_rows()
kombiniert zwei Datenrahmen, indem alle Vektoren der beiden Datenrahmen konkateniert werden. Dabei muss beachtet werden, dass alle zu konkatenierenden Vektoren in beiden Datenrahmen gleich benannt sind.
Die Funktion bind_rows()
sollte nur dann eingesetzt werden, wenn eine normale Vereinigung mithilfe von Indizes nicht möglich ist.
Oft soll nach dem Konkatenieren der Datensätze die ursprünglichen Datenrahmen nachvollziehbar bleiben. Die Funktion bind_row()
bietet hierzu den optionalen Parameter .id
an. Dieser Parameter erwartet einen Vektornamen. Ist dieser Parameter gesetzt, dann erzeugt die Funktion eine Sequenz für die Datenrahmen und ergänzt alle Datensätze um den entsprechenden Wert.
Sollen andere Werte zur Identifikation der Datenrahmen verwendet werden, so müssen die Datenrahmen als benannte Liste übergeben werden und der Parameter .id
muss gesetzt sein.
Die Funktion bind_cols()
kombiniert zwei Datenrahmen, indem alle Datensätze der beiden Datenrahmen konkateniert werden. Dabei muss beachtet werden, dass die erzeugten Datensätze nach dem Konkatenieren auch zusammengehörende Werte umgfassen. Dazu müssen die Datensätze in beiden Datenrahmen tatsächlich in der gleichen Reihenfolge vorliegen.
Sollten die konkatenierten Datenrahmen nicht genau passen, weil entweder unterschiedlich benannte Vektoren oder unterschiedliche viele Datensätze in den beiden Datenrahmen existieren, dann erzeugt für die jeweils fehlenden Werte NA
-Werte. Das ist oft unerwünscht. Deshalb sollte vor der Verwendung von bind_rows()
oder bind_cols()
geprüft werden, ob die Datenrahmen für die konkatenation geeignet sind.
15.1.2 Vereinigung
R kennt neben der Spaltenkonkatenation mit bind_rows()
noch drei weitere Formen der Vereinigung:
- Die vollständige Vereinigung (
full_join()
) - Die linksseitige Vereinigung (
left_join()
) - Die rechtsseitige Vereinigung (
right_join()
)
Diese Funktionen kommen immer dann zum Einsatz, wenn die Datensätze in den Datenrahmen nicht in der gleichen Reihenfolge vorliegen und die Verknüpfung über einen Index erfolgen soll. Dieser Index muss in beiden Datenrahmen existieren.
Wird bei der vollständigen Vereinigung mit full_join()
kein Index für die Kombination angegeben, dann erzeugt R für das Ergebnis alle Permutationen der Datensätze in beiden Datenrahmen. Diese Operation ist sehr speicherhungrig und kann selbst bei Datenrahmen mit vergleichsweise wenig Datensätzen zu unerwarteten Programmabstürzen führen, wenn das Ergebnis nicht mehr in den Arbeitsspeicher des Rechners passt.
Die Funktionen left_join()
und right_join()
erlauben die partielle Vereinigung der beiden Datenrahmen.
15.1.3 Schnittmenge
Die Schnittmenge bzw. inner join zweier Datenrahmen wird in R mit der Funktion inner_join()
gebildet. Das Ergebnis der Schnittmenge enthält Datensätze, die für den verknüpfenden Index eine Entsprechung in beiden Datensätzen haben. Alle anderen Datensätze werden entfernt.
15.1.4 Differenz
Gelegentlich sollen vorgegebene Werte entfernt werden. Dazu kommt eine spezielle Kodierungstabelle zum Einsatz. Diese Tabelle legt fest, welche Werte aus den Daten entfernt oder ausgeschlossen werden sollen. Entsprechend heisst diese Tabelle eine Ausschlusstabelle.
In R lassen sich Ausschlusstabellen mit der Funktion anti_join()
verwenden.
15.2 Kodierungstabellen
Eine Kodierungstabelle ist ein Datenrahmen, mit der Werte in andere Werte überführt werden. In der Regel werden Kodierungstabellen für die Neukodierung von diskreten Daten verwendet. Eine Kodierungstabelle enthält dazu den ursprünglichen zu kodierenden Wert und die jeweiligige neue Kodierung.
Die zu kodierenden Werte dürfen in einer Kodierungstabelle genau einmal vorkommen. Deshalb sind die zu kodierenden Werte in der Kodierungstabelle ein Primärindex.
15.3 Kodierung durch Kombination
Der einfachste Weg, um Werte in einem Datenrahmen in R mithilfe einer Kodierungstabelle neu zu kodieren, ist die Kombination der Daten mit einer Kodierungstabelle. Dabei wird der zu kodierende Vektor als Sekundärindex verwendet, der mit dem Primärindex der Kodierungstabelle über die Schnittmenge mithilfe der Funktion inner_join()
kombiniert wird. Durch diese Kombination werden gleichzeitig alle ungültigen Werte (inkl. NA
) entfernt.
15.4 Mit Faktoren kodieren
Ordinalskalierte Daten werden sehr oft als Zahlen kodiert. In R ist für diese Aufgabe keine Kodierungstabelle notwendig. Stattdessen werden die Werte als Faktor (Kapitel 10) behandelt, für den die Reihenfolge des Wertebereichs mit den geeigneten Funktionen der Bibliothek forcats
(Wickham, 2023) festgelegt wird. Für die Kodierung in Zahlen wird ausgenutzt, dass R die Faktorstufen intern bereits Zahlenwerten zuweist. Diese Zuweisung verwendet die Funktion as.numeric()
, um aus einem Faktor numerische Werte abzuleiten.