Reshape-Funktion

Methoden der Zeitreihenanalyse

Moderator: schubbiaschwilli

Antworten
Carolin
Beiträge: 16
Registriert: Fr Okt 04, 2019 2:36 pm

Reshape-Funktion

Beitrag von Carolin »

Hallo an alle R-Profis,

für meine Masterarbeit möchte ich einen Längsschnittdatensatz (1500 Vpn je 4 Messzeitpunkte) mit R analysieren. Ich habe bisher nur entsprechende Beispielaufgaben im Rahmen der Statistikvorlesung gelöst, die jedoch deutlich weniger komplex waren (hier läuft es im Endeffekt auf ein gemischtes Mediationsmodell mit Moderationen hinaus). Ich habe mir jetzt eine Teilpfad des gesamtem Modells ausgesucht und ( monatliche pendeldauer(T2....T5_cdu) und monatliches Pendelvergnügen(T2...T5_ce ), habe die Exceltabelle bei R eingelesen und möchte mit dem reshape Befehl von wide auf longformat wechseln.

Hier die ersten 5 Zeilen der Daten (sorry, irgendwie verhaut es mir die Formatierung, aber die Reihenfolge ist ja ersichtlich: Die ersten vier Werte nach dem Personencode sind 4 Messzeitpunkte der Pendeldauer, die letzten 4 die des Pendelvergnügens)

Code: Alles auswählen

      Age Gender T1_code T2_cdu T3_cdu T4_cdu T5_cdu T2_ce T3_ce T4_ce T5_ce
  
1    39      2      NUR07       5          7          NA       NA       1.6   2.2       NA    NA  
2    30      1      AAB29      NA        NA          NA       NA      NA    NA        NA    NA  
3    20      1      AKT20       200      NA          10       10       3      NA        2.2   3.2
4    48      2      IEH21         60      25          100     10       1.4      2         2.2   2  
5    27      2      IRB20         35      35           NA       35       2.2   2.2       NA     2.6
Ich dachte, ich kann in zwei Schritten "reshapen"; erst die Pendeldauer, danach das Pendelvergnügen. Ich habe den Befehl aus einem Beispiel kopiert und entsprechend nach meinem Datensatz abgeändert.

Code: Alles auswählen

Daten_cdu_ce <- reshape(Daten_cdu_ce, varying = c("T2_cdu", "T3_cdu", "T4_cdu", "T5_cdu"),
                      v.names = "cdu", idvar = "T1_code", direction = "long")
bei dem Befehl kommt jedoch folgende Fehlermeldung:

Code: Alles auswählen

Error in `.rowNamesDF<-`(x, value = value) : invalid 'row.names' length
In addition: Warning message:
Setting row names on a tibble is deprecated. 
Kann mir, der blutigen Anfängerin, bitte jemand helfen? :)

Vielen Dank und ein schönes Wochenende!
Carolin

Edit - Moderatoreingriff bigben: Code-Tags eingesetzt
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Reshape-Funktion

Beitrag von bigben »

Hallo Carolin,

Deine Fehlermeldung zeigt, dass Du die Daten nicht als Dataframe, sondern als tibble eingelesen hast. Lädt man Deine Daten richtig als Dataframe ein, dann läuft das ohne Fehlermeldung:

Code: Alles auswählen

Daten_cdu_ce <- read.table(header=TRUE, text="zeile Age Gender T1_code T2_cdu T3_cdu T4_cdu T5_cdu T2_ce T3_ce T4_ce T5_ce
                        1    39      2      NUR07       5          7          NA       NA       1.6   2.2       NA    NA  
                        2    30      1      AAB29      NA        NA          NA       NA      NA    NA        NA    NA  
                        3    20      1      AKT20       200      NA          10       10       3      NA        2.2   3.2
                        4    48      2      IEH21         60      25          100     10       1.4      2         2.2   2  
                        5    27      2      IRB20         35      35           NA       35       2.2   2.2       NA     2.6")

Daten_cdu_ce <- reshape(Daten_cdu_ce, varying = c("T2_cdu", "T3_cdu", "T4_cdu", "T5_cdu"),
                        v.names = "cdu", idvar = "T1_code", direction = "long")
head(Daten_cdu_ce)
Lass mich raten: Hast Du die Daten über einen Menüpunkt in RStudio eingelesen? Die Diskussion hatten wir gerade hier: http://forum.r-statistik.de/viewtopic.php?f=7&t=1841
und deshalb würde mich interessieren: Hast Du das Gefühl, dass ungefragt ein tibble anstelle eines Dataframes eingelesen wurde oder ist Dir klar gewesen, dass die Abfrage in RStudio zu einem tibble führen würde?

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Carolin
Beiträge: 16
Registriert: Fr Okt 04, 2019 2:36 pm

Re: Reshape-Funktion

Beitrag von Carolin »

Hallo Bernhard,

Vielen Dank für deine schnelle Antwort. Erstmal zu deiner Frage: ehrlich gesagt habe ich keine Ahnung, was ein tibble ist (ich bin Psychologin und meine Informatikskills sind sehr bescheiden :D ) Aber ich habs übers Menü eingelesen; genau.

Ich habe deine Befehle zu meinen hinzugefügt- das hat leider nicht geklappt.

Jetzt hab ichs nochmal ganz anders probiert und meine Exceltabelle als .txt (Unicode) abgespeichert. Wenn ich sie dann über read.table aufrufen will, kommt jedoch was ganz Kryptisches an, hier die ersten sechs Zeilen:

ÿþA
1 \n
2 2
3 1
4 A
5 2
6 1

15000 nochwas Beobachtungen bei einer Variable - was ist denn da schief gelaufen? Hat das vielleicht irgendwas mit meinen zahlreichen missing values zu tun?

Liebe Grüße
Carolin
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Reshape-Funktion

Beitrag von bigben »

Hallo Carolin,

speichere in Excel als csv und lies das in R mit dem Befehl read.csv2() ein, dann wird alles gut. So mache ich das seit Jahren mit Erfolg. Lerne: RStudios Menüs sind kein Ersatz für R lernen.

Was tibbles sind kannst Du irgendwann lernen, wenn Du mehr "normales" R gelernt hast (Versuch, dataframes nochmal zu verbessern.)

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Carolin
Beiträge: 16
Registriert: Fr Okt 04, 2019 2:36 pm

Re: Reshape-Funktion

Beitrag von Carolin »

Es hat geklappt! VIELEN DANK!!! :)
Antworten