Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
SophiaSchi
Beiträge: 7
Registriert: Mi Jun 02, 2021 4:25 pm

Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Beitrag von SophiaSchi »

Hallo zusammen,

leider kenne ich mich nicht allzu gut mit R aus, komme meistens aber irgendwie ans Ziel.
Jetzt ist leider mein Skript so unübersichtlich, dass ich eine möglichst effiziente Lösung für folgendes Problem suche:

Ich habe einen Datensatz, in dem bei jeder VP eine Variable in 4 Bedingungen erhoben wurden. Durch ein within-design liegen die Daten in 4 verschiedenen Spalten vor (und ich habe somit keine Spalte, die die Bedingung von 1-4 kopiert). Um jetzt mittels einer ANOVA zu untersuchen, ob sich die Werte der Variablen in den 4 Bedingungen unterscheiden, hätte ich gerne einen Datensatz, in dem im Prinzip die 4 Variablen "untereinandergehängt" werden und je eine weitere Spalte die Bedingung und die VPNummer kodiert (die sich dann entsprechend jeweils 4 Mal wiederholt).
Bisher habe ich jeweils pro Bedingung einen einzelnen Datensatz erstellt und hier die Bedingung "händisch" als 1, 2,3 oder 4 kodiert und diese mit rbind aneinandergefügt (da mehrere Variablen erhoben wurden, ist das Skript am Ende sehr lang). Gibt es hier eine effizientere Möglichkeit?

Ich hoffe, mein Problem ist deutlich geworden und ich habe alle wichtigen Infos aufgeschrieben.
Vielen Dank im Voraus! :)
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Beitrag von bigben »

Hallo Sophia,

da gibt es viele richtige Antworten. Eine gute ist die Funktino pivot_longer aus dem Package tidyr. Schau mal, ob Dir das hier hilft:

Code: Alles auswählen

bsp <- data.frame(id = 1:10,
                  messung1 = 1:10,
                  messung2 = 11:20,
                  messung3 = 21:30)

library(tidyr)
pivot_longer(bsp, messung1:messung3) %>% as.data.frame()
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Beitrag von EDi »

Schau dir mal die Funktion tidyr::pivot_longer an.

Oder ?reshape (das empfinde ich aber schwerer zu verstehen).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
SophiaSchi
Beiträge: 7
Registriert: Mi Jun 02, 2021 4:25 pm

Re: Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Beitrag von SophiaSchi »

Vielen Dank für die schnellen Antworten!

Ich hatte auch schon an pivot_longer gedacht, habe dann ja aber immer noch das Problem, dass ich keine Variable (dann als Spalte) habe, die meine 4 Bedingungen kodiert und "auseinanderhält", oder?
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Beitrag von bigben »

Hallo Sophia,

Ich verstehe das Problem gerade nicht. Kannst Du konkret am Output meines Codebeispiels oben erklären, was Dir da fehlt?

LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
SophiaSchi
Beiträge: 7
Registriert: Mi Jun 02, 2021 4:25 pm

Re: Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Beitrag von SophiaSchi »

Oh stimmt, es gibt auch gar kein Problem! Ich glaube, ich stand nur auf dem Schlauch und habe es jetzt richtig eingegeben und es klappt! :D
Vielen, vielen Dank!

Jetzt, wo das ja doch schon so einfach war, habe ich dann noch die Frage, ob man das auch gleichzeitig mit mehreren Variablen nach dem Prinzip machen kann. Also angenommen, ich habe drei Variablen a, b, c, die in jeweils 4 Bedingungen erhoben wurden (also habe ich die Spalten a1, a2, a3, a4, b1, b2, ...). Kann ich dann so einen Datensatz genau so wie in deinem Beispiel im Long-Format haben, nur dass ich eben die drei Spalten a, b und c habe? Oder sollte ich vorher mit jeder Variablen wie in deinem Beispiel vorgehen und diese mit cbind() (?) verbinden?
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Beitrag von bigben »

Hallo Sophia,

versuch mal

Code: Alles auswählen

library(tidyr)
vignette(pivot) 
Dann zeigt R Dir einen ausführlichen Erklärungstext zu pivot_longer und pivot_wider an. Unter der Überschrift "Multiple observations per row" solltest Du Dir die vielfältigen Möglichkeiten dieser Funktion in Ruhe und vor allem in Kenntnis Deines konkreten Datenvorhabens durchlesen.
So far, we have been working with data frames that have one observation per row, but many important pivotting problems involve multiple observations per row. You can usually recognise this case because name of the column that you want to appear in the output is part of the column name in the input. In this section, you’ll learn how to pivot this sort of data. ...
Sonst nochmal konkret nachfragen, dann aber mit reproduzierbarem Minimalbeispiel.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
SophiaSchi
Beiträge: 7
Registriert: Mi Jun 02, 2021 4:25 pm

Re: Variablen aus unterschiedlichen Bedingungen in einem Datensatz zusammenfügen

Beitrag von SophiaSchi »

Hallo Bernhard,

das Beispiel sieht an sich schon ganz gut aus und das ist auch das, was ich suche. Ich bekomme es aber leider aufgrund meiner (wahrscheinlich recht ungünstigen) Variablennamen nicht richtig hin. Der Aufbau meines Datensatzes und der Variablennamen sieht folgendermaßen aus:
  • id
    S1.X
    S2.X
    S3.X
    S4.X
    S1.Y.
    S2.Y.
    S3.Y.
    S4.Y.
    S1.Z.
    S2.Z.
    S3.Z.
    S4.Z.
Dabei wären dann X, Y und Z meine 3 Variablen, die jeweils in den Bedingungen 1, 2, 3, 4 erhoben wurden. S ist eine bei allen Variablen identische Bezeichnung.

Liebe Grüße Sophia
Antworten