Reshape from long to wide mit sehr komplexen Datensatz
Reshape from long to wide mit sehr komplexen Datensatz
Hallo liebe Community,
ich habe einen sehr großen Datensatz in einem langen Format und habe den ersten Probanden mit dput unten angehängt. Die Variablen Namen des bestehenede langen Formates lauten: Items, cueLocX, cueLocY, description, stimResp, .thisRepN, .thisTrialN, .thisN, .thisIndex, RatingScale, trialType, resp, rt, corrResp, correct, streekDum, fixation1Time, participant, responseTime, cueTime, dateStr, streekSize.
Diesen Datensatz würde ich gerne in von einem langen in ein breites Format bringen, sodass jeder Participant eine Zeile belegt. Aus der Variable Items, soll aus jedem Item eine Variable entstehen und das in ABHÄNGIGKEIT von der Variable "trialType". Die Variable "trialType" gibt die unterschiedlichen Durchläufe des Versuches an. Aus der Variable "correct" soll eine Variable "Anzahl_richtige"enstehen, indem eine Summe von der Dummikodierung gebildet werden soll.
Gehts so etwas überhaupt mit reshape?
Wäre wirklich nett wenn mir jemand diese Frage beantworten könnte oder mir einen Weg aufzeigen kann
ich habe einen sehr großen Datensatz in einem langen Format und habe den ersten Probanden mit dput unten angehängt. Die Variablen Namen des bestehenede langen Formates lauten: Items, cueLocX, cueLocY, description, stimResp, .thisRepN, .thisTrialN, .thisN, .thisIndex, RatingScale, trialType, resp, rt, corrResp, correct, streekDum, fixation1Time, participant, responseTime, cueTime, dateStr, streekSize.
Diesen Datensatz würde ich gerne in von einem langen in ein breites Format bringen, sodass jeder Participant eine Zeile belegt. Aus der Variable Items, soll aus jedem Item eine Variable entstehen und das in ABHÄNGIGKEIT von der Variable "trialType". Die Variable "trialType" gibt die unterschiedlichen Durchläufe des Versuches an. Aus der Variable "correct" soll eine Variable "Anzahl_richtige"enstehen, indem eine Summe von der Dummikodierung gebildet werden soll.
Gehts so etwas überhaupt mit reshape?
Wäre wirklich nett wenn mir jemand diese Frage beantworten könnte oder mir einen Weg aufzeigen kann
Zuletzt geändert von juppi am Mo Mai 28, 2018 3:58 pm, insgesamt 2-mal geändert.
Re: Reshape from long to wide mit sehr komplexen Datensatz
Hallo juppi,
leider habe ich nicht verstanden, wie das Ergebnis aussehen soll.
Auch frage ich mich, ob man eine solche Datenwühlerei überhaupt machen sollte - das hängt wesentlich davon ab, was man wie auswerten möchte. Vom Gefühl er würde ich sagen, wenn es keinen extremen Zwang gibt, die Daten umzuformen, sollte man sie so lassen.
Weiterhin ist mir aufgefallen, dass die verschiedenen Werte von $trialType verschieden häufig vorkommen.
Eventuell handelst Du Dir hierdurch noch methodische Schwierigkeiten ein (Stichwort Heteroskedastizität).
Gruß, Jörg
leider habe ich nicht verstanden, wie das Ergebnis aussehen soll.
Auch frage ich mich, ob man eine solche Datenwühlerei überhaupt machen sollte - das hängt wesentlich davon ab, was man wie auswerten möchte. Vom Gefühl er würde ich sagen, wenn es keinen extremen Zwang gibt, die Daten umzuformen, sollte man sie so lassen.
Weiterhin ist mir aufgefallen, dass die verschiedenen Werte von $trialType verschieden häufig vorkommen.
Code: Alles auswählen
table(dat.all.Teila$trialType)
Gruß, Jörg
Re: Reshape from long to wide mit sehr komplexen Datensatz
Vielen Dank für Deine Antwort. Das es etwas schwierig ist genau zu erklären welche Variablen ich erstellen möchte. Habe ich mal ein vereinfachtes Beispiel erstellt. Folgende Variablen sollen entstehen "Person" als idvar und der Rest in Abhängigkeit von Country und Time. Das heißt vier weitere Variablen "France_Sept", "France_Okt", "UK_Sept", "UK-Okt".
Ohne den Datensatz umzformen werden meine Berechnungen leider schwer und ich muss das machen
Vielen Dank für Eure Hilfe
Code: Alles auswählen
install.packages("reshape")
require(reshape)
datas1 <- data.frame(Person=c("Mike","Mike","Bob","Bob"), Country=c("France","UK","France","UK"),
Time=c("Sept", "Okt", "Sept","Okt"), Spent=c(1213, 1872, 1726, 2234))
datas1
s1 <- cast(datas, Person~Country+Time, value="Spent")
#Dieser Befehl funktioniert nicht -> Country+Time nicht möglich
Vielen Dank für Eure Hilfe
Zuletzt geändert von jogo am Mo Mai 28, 2018 8:55 am, insgesamt 1-mal geändert.
Grund: Formatierung verbessert.
Grund: Formatierung verbessert.
Re: Reshape from long to wide mit sehr komplexen Datensatz
Was funktioniert nicht?
Bei mir erzeugt
folgende Datei:
Das passt doch!?
Bei mir erzeugt
Code: Alles auswählen
library(reshape)
data.long <- data.frame(Person=c("Mike","Mike","Bob","Bob"), Country=c("France","UK","France","UK"),
Time=c("Sept", "Okt", "Sept","Okt"), Spent=c(1213, 1872, 1726, 2234))
data.long
data.wide <- cast(data.long, Person ~ Country + Time, value="Spent")
data.wide
Code: Alles auswählen
Person France_Sept UK_Okt
1 Bob 1726 2234
2 Mike 1213 1872
Re: Reshape from long to wide mit sehr komplexen Datensatz
oder mit data.table:
Gruß, Jörg
Code: Alles auswählen
library("data.table")
datas1 <- data.table(Person=c("Mike","Mike","Bob","Bob"), Country=c("France","UK","France","UK"),
Time=c("Sept", "Okt", "Sept","Okt"), Spent=c(1213, 1872, 1726, 2234))
datas1
dcast(datas1, Person ~ Country + Time, value.var = "Spent")
Re: Reshape from long to wide mit sehr komplexen Datensatz
Super vielen Dank! Das hat mir wirklich geholfen!! Ich konnte die Erkenntnisse direkt auf meinen großen Datensatz anwenden. Jetzt habe ich noch ein letztes Problem, dass ich mit einer Erweiterung des vereinfachten Beispiels darstellen möchte. Ich habe folgenden Datensatz:
Diesen möchte ich in ein breites Format reshapen, dass eine Variable "Anzahl_richtige" entsteht, welche die Summe der bisherigen Variable "correct" ausgibt! Leider funktioniert mein Befehl wieder nicht...
Code: Alles auswählen
datas2 <- data.frame(Person=c("Mike","Mike","Bob","Bob"), Country=c("France","UK","France","UK"),
Spent=c(1213, 1872, 1726, 2234), correct=c(1,1,1,0))
datas2
datas2_wide_score <- cast(datas2, Person~correct, value="correct", fun.aggregate = sum, drop="Country")
Re: Reshape from long to wide mit sehr komplexen Datensatz
Du meinst jetzt aber nicht dies:
Bitte zeige uns doch, wie das Ergebnis aussehen soll!
Gruß, Jörg
Code: Alles auswählen
datas2 <- data.frame(Person=c("Mike","Mike","Bob","Bob"), Country=c("France","UK","France","UK"),
Spent=c(1213, 1872, 1726, 2234), correct=c(1,1,1,0))
datas2$Anzahl_richtige <- cumsum(datas2$correct)
datas2
Bitte zeige uns doch, wie das Ergebnis aussehen soll!
Gruß, Jörg
Re: Reshape from long to wide mit sehr komplexen Datensatz
Hm nein, bei meinem riesen Datensatz wird das evtl. dann nicht mehr auf die richtigen VP passen. Am besten wäre natürlich wenn ich mit einem Befehl diesen Datensatz bekommen würde:
Code: Alles auswählen
Person France_Sept UK_Okt Anzahl_richtige
1 Bob 1726 2234 2
2 Mike 1213 1872 1
Re: Reshape from long to wide mit sehr komplexen Datensatz
o.k., das lässt sich mit einem Einzeiler erledigen:
Gruß, Jörg
Code: Alles auswählen
library("data.table")
datas1 <- data.table(Person=c("Mike","Mike","Bob","Bob"), Country=c("France","UK","France","UK"),
Time=c("Sept", "Okt", "Sept","Okt"), Spent=c(1213, 1872, 1726, 2234), correct=c(1,1,1,0))
datas1
dcast(datas1, Person ~ Country + Time, value.var = "Spent")[datas1[, .(correct=sum(correct)), Person], on="Person"]
Re: Reshape from long to wide mit sehr komplexen Datensatz
Da kommt leider eine Fehlermeldung
Code: Alles auswählen
> datas3 <- data.frame(Person=c("Mike","Mike","Bob","Bob"), Country=c("France","UK","France","UK"),
+ Time=c("Sept", "Okt", "Sept","Okt"), Spent=c(1213, 1872, 1726, 2234), correct=c(1,1,1,0))
> datas3
Person Country Time Spent correct
1 Mike France Sept 1213 1
2 Mike UK Okt 1872 1
3 Bob France Sept 1726 1
4 Bob UK Okt 2234 0
> dcast(datas3, Person ~ Country + Time, value.var = "Spent")[datas1[, .(correct=sum(correct)), Person], on="Person"]
Error in `[.data.frame`(dcast(datas3, Person ~ Country + Time, value.var = "Spent"), :
unused argument (on = "Person")