Kurs
Daten-Reshaping in R bedeutet, Zeilen und Spalten so anzuordnen, dass sie für deine Zwecke optimal nutzbar sind. Meist liegen Daten in R als Data-Frame-Format vor, um sie mit Funktionen wie "rbind()", "cbind()" usw. zu verarbeiten.
Bei diesem Prozess formst du die Daten in Zeilen und Spalten um. Reshaping heißt, die Daten gezielt neu zu strukturieren, damit du sie anschließend weiterverarbeiten kannst.
Deine Daten erstellen
Lass uns einen Zufallszahlengenerator verwenden und Spalten erzeugen, die wir zu einem Data Frame zusammenführen. Außerdem fügen wir eine id für die spätere Nutzung ein. "set.seed(123)" sorgt dafür, dass die gleichen Zufallszahlen auf allen Maschinen reproduzierbar sind. Es werden drei Variablen colm1, colm2, colm3 erstellt. Mit "sample()" werden Werte von 1 bis 15 erzeugt, wobei Wiederholungen möglich sind. Die Daten werden in einem Data Frame als Tabelle gespeichert, und eine eindeutige id wird ergänzt.
set.seed(123)
N <- 15
colm1 <- sample(1:15, N, replace=TRUE)
colm2 <- sample(1:15, N, replace=TRUE)
colm3 <- sample(1:15, N, replace=TRUE)
df_Temp <- data.frame(colm1, colm2,colm3)
df_Temp$id<-seq(nrow(df_Temp))
df_Temp
Der obige Code liefert die folgende Ausgabe: Es gibt drei Spalten namens "colm1", "colm2", "colm3" sowie eine id von 1 bis 15. Die Spaltenwerte stammen aus dem Bereich 1 bis 15; einige Zahlen wiederholen sich, andere kommen nicht vor.
colm1 colm2 colm3 id
15 11 14 1
15 5 3 2
3 3 4 3
14 11 14 4
3 9 1 5
10 12 11 6
2 9 7 7
6 9 5 8
11 13 12 9
5 3 15 10
4 8 10 11
14 10 13 12
6 7 7 13
9 10 9 14
10 9 9 15
cbind-Funktion
Verwendung: Fasst Vektoren, Matrizen und Data Frames spaltenweise zusammen.
Parameter: cbind(v1, v2): v1, v2 können Vektoren, Matrizen oder Data Frames sein.
Schauen wir uns ein Beispiel für das Binden an.
Die id kannst du mit "df_Temp[,4]" auswählen, während "df_Temp[,2]" die Spalte "colm2" von df_Temp auswählt. Beides dient als Parameter für "cbind()" und wird in der Variable "cbindexample" gespeichert. Anschließend lassen sich die Spaltennamen mit "colnames()" ändern, indem du die Vektoren auf neue Werte setzt, z. B. "newid", "new_colm2".
cbindexample<-cbind(df_Temp[,4],df_Temp[,2])
colnames(cbindexample)<- c('newid','new_colm2')
cbindexample
Der Code oben erzeugt die folgende Ausgabe. Du kannst die beiden Spalten id und column2 mit der Funktion "cbind" zu einem neuen Data Frame zusammenführen. Außerdem wurden die Spaltennamen geändert: Aus "id" wurde "newid" und aus der zweiten Spalte "new_colm2".
newid new_colm2
1 11
2 5
3 3
4 11
5 9
6 12
7 9
8 9
9 13
10 3
11 8
12 10
13 7
14 10
15 9
rbind-Funktion:
Verwendung: rbind kombiniert Vektoren, Matrizen oder Data Frames zeilenweise.
Parameter: rbind(v1, v2): v1, v2 können Vektoren, Matrizen oder Data Frames sein.
Erstellen wir einen neuen Vektor namens "new_vector" und fügen ihn mit "rbind" an den zweispaltigen "cbindexample" an. Beide werden konkateniert und in "rbindexample" gespeichert.
new_vector<- c(16,15)
rbindexample<- rbind(cbindexample,new_vector)
rbindexample
Der Code erzeugt unten die Ausgabe, in der eine neue Zeile mit den Werten 16 und 15 in "newid" bzw. "new_colm2" hinzugefügt wurde.
newid new_colm2
1 11
2 5
3 3
4 11
5 9
6 12
7 9
8 9
9 13
10 3
11 8
12 10
13 7
14 10
15 9
16 15
Melt-Funktion:
Verwendung: Die Melt-Funktion wandelt ein Objekt in den "geschmolzenen" Zustand um, d. h., mehrere Spalten werden in eine einzige Spalte überführt.
Parameter: melt(data,…,na.rm=FALSE/TRUE, value.name=”value” )
data: Eingabedaten, die du schmelzen möchtest.
...: Zusätzliche Argumente, die übergeben werden.
na.rm: Wandelt explizite fehlende Werte in implizite fehlende um.
value.name: Name der Spalte, in der die Werte gespeichert werden.
Schauen wir uns Code an, der die Daten mithilfe der Variablen id in eine Spalte mit Spaltenname und Wert "schmilzt":
Importiere die Bibliothek "reshape2" mit "library()" und nutze melt, um die df_Temp-Spalten colm1, colm2, colm3 gemäß der Variablen id in einer Spalte namens "variable" zusammenzuführen.
library(reshape2)
molted=melt(df_Temp,id.vars=c("id"))
molted
id variable value
1 colm1 15
2 colm1 15
3 colm1 3
4 colm1 14
5 colm1 3
6 colm1 10
7 colm1 2
8 colm1 6
9 colm1 11
10 colm1 5
11 colm1 4
12 colm1 14
13 colm1 6
14 colm1 9
15 colm1 10
1 colm2 11
2 colm2 5
3 colm2 3
4 colm2 11
5 colm2 9
6 colm2 12
7 colm2 9
8 colm2 9
9 colm2 13
10 colm2 3
11 colm2 8
12 colm2 10
13 colm2 7
14 colm2 10
15 colm2 9
1 colm3 14
2 colm3 3
3 colm3 4
4 colm3 14
5 colm3 1
6 colm3 11
7 colm3 7
8 colm3 5
9 colm3 12
10 colm3 15
11 colm3 10
12 colm3 13
13 colm3 7
14 colm3 9
15 colm3 9
Die Ausgabe zeigt: Wenn du die Daten aus colm1, colm2, colm3 entlang der Variablen id schmilzt, werden sie zu einer Spalte namens "variable" zusammengeführt, und die jeweiligen Werte stehen in "value".
Dcast-Funktion:
Verwendung: Aus einem geschmolzenen Datensatz kannst du mit dieser Funktion wieder das ursprüngliche Format herstellen.
Parameter: dcast(data, id_variable~value)
data: Geschmolzene Daten, die zurück ins Ausgangsformat überführt werden sollen.
id_variable: Eine oder mehrere Spalten, anhand derer die anderen Spalten in eine Spalte geschmolzen wurden.
~: Nach diesem Zeichen folgen die Werte bzw. die neue Spalte des geschmolzenen Datensatzes.
Im folgenden Code wird "reshape2" mit "library()" geladen. "dcast()" erhält als ersten Parameter die Daten aus dem vorangegangenen "melt()"-Schritt und nutzt das "~"-Zeichen mit id, um die neue Spaltenstruktur zu bilden.
library(reshape2)
dcast(molted,id~variable)
id colm1 colm2 colm3
1 15 11 14
2 15 5 3
3 3 3 4
4 14 11 14
5 3 9 1
6 10 12 11
7 2 9 7
8 6 9 5
9 11 13 12
10 5 3 15
11 4 8 10
12 14 10 13
13 6 7 7
14 9 10 9
15 10 9 9
Du siehst, dass die durch "melt()" veränderten Daten wieder ins ursprüngliche Format überführt wurden. Es gibt wieder drei Spalten mit ihren jeweiligen Werten sowie eine separate id-Spalte.
Transpose-Funktion:
Verwendung: Wandelt Zeilen in Spalten und Spalten in Zeilen um.
Parameter: t(data). data ist der Data Frame, den du transponieren möchtest.
Ändern wir mittels Transponierung Zeilen in Spalten und umgekehrt. Das geht einfach mit "t(df_Temp)", wie unten gezeigt.
trans <- t(df_Temp)
trans
Der obige Code liefert folgende Ausgabe:
colm1 15 15 3 14 3 10 2 6 11 5 4 14 6 9 10
colm2 11 5 3 11 9 12 9 9 13 3 8 10 7 10 9
colm3 14 3 4 14 1 11 7 5 12 15 10 13 7 9 9
id 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Du siehst: Aus dem Data Frame mit 15 Zeilen und vier Spalten werden durch die Transponierung 15 Spalten und 3 Zeilen.
Glückwunsch
Glückwunsch, du hast das Ende dieses Tutorials erreicht!
In diesem Tutorial hast du verschiedene R-Funktionen kennengelernt: "rbind()", "cbind()", dazu "Melt()", "Dcast()" und zum Schluss die Transponierung.
Wenn du mehr über R lernen möchtest, besuche DataCamps Introduction to R und sieh dir unser R Packages: A Beginner's Tutorial an.
Referenzen:
Melt-Funktionen