Entschuldigung, wenn dies eine einfache Frage ist, aber ich habe nicht gefunden, eine einfache Lösung nach der Suche. Ich bin ziemlich neu in R und habe Probleme beim Konvertieren von Wide Format in Long Format mit den Funktionen zum Schmelzen (reshape2) oder zum Sammeln (tidyr). Der Datensatz, mit dem ich arbeite, enthält 22 verschiedene Zeitvariablen mit jeweils 3 Zeiträumen. Das Problem tritt auf, wenn ich versuche, all diese Dateien gleichzeitig vom Wide- zum Long-Format zu konvertieren. Ich hatte Erfolg darin, sie einzeln zu konvertieren, aber es ist sehr ineffizient und lang, also habe ich mich gefragt, ob jemand eine einfachere Lösung vorschlagen könnte. Im Folgenden wird ein Beispieldatensatz erstellt ich, dass in ähnlicher Weise wie der Datensatz mit arbeite ich formatiert ist:R: Konvertieren von Wide-Format in Long-Format mit mehreren 3 Zeitraum Variablen
Subject <- c(1, 2, 3)
BlueTime1 <- c(2, 5, 6)
BlueTime2 <- c(4, 6, 7)
BlueTime3 <- c(1, 2, 3)
RedTime1 <- c(2, 5, 6)
RedTime2 <- c(4, 6, 7)
RedTime3 <- c(1, 2, 3)
GreenTime1 <- c(2, 5, 6)
GreenTime2 <- c(4, 6, 7)
GreenTime3 <- c(1, 2, 3)
sample.df <- data.frame(Subject, BlueTime1, BlueTime2, BlueTime3,
RedTime1, RedTime2, RedTime3,
GreenTime1,GreenTime2, GreenTime3)
Eine Lösung
die für mich gearbeitet hat, ist die sammeln Funktion von tidyr zu verwenden, nach Thema die Datenanordnungs (so dass die Daten jeder Person gruppiert sind) und dann nur das Subjekt, den Zeitraum und die Bewertung auswählen. Dies wurde für jede Variable (in meinem Fall 22) getan.
install.packages("dplyr")
install.packages("tidyr")
library(dplyr)
library(tidyr)
BlueGather <- gather(sample.df, Time_Blue, Rating_Blue, c(BlueTime1,
BlueTime2,
BlueTime3))
BlueSorted <- arrange(BlueGather, Subject)
BlueSubtracted <- select(BlueSorted, Subject, Time_Blue, Rating_Blue)
Nach diesem Code kombiniere ich alles in einem Datenrahmen. Das scheint mir sehr langsam und ineffizient zu sein, und ich hoffte, dass mir jemand helfen könnte, eine einfachere Lösung zu finden. Vielen Dank!
Danke für die schnelle Antwort! Ich habe ein paar Probleme damit, dies auf meinen echten Datensatz anzuwenden. Ich erhalte den folgenden Fehler: 'code' Fehler in [<-. Data.frame (* tmp *,, v.name [i], Wert = c (1.28571428571429,: Spaltenname" "kann keinem Spaltencode entsprechen) 'Als Referenz haben die Variablen in meinem Dataset tatsächlich keine Zahlen in ihnen für die Zeit. Ich hätte dies in den Mock-Daten klarstellen müssen. Jede Variable endet mit _Pre, _Post und _Final. – Eugene
Ich poste a Empfohlene Methode, um dies zu beheben – lmo