Werte eines Dataframes anhand einzelner Werte zeilenweise sortieren

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Dschounas
Beiträge: 2
Registriert: Di Apr 02, 2024 1:55 pm

Werte eines Dataframes anhand einzelner Werte zeilenweise sortieren

Beitrag von Dschounas »

Liebe Community,

Ich stehe vor der Herausforderung, die Umfrage für meine Masterarbeit mit R auszuwerten, ohne großartige Kenntnisse über R zu haben. Die absoluten Basics habe ich kennengelernt, aber die reichen scheinbar nicht für meine Zwecke.

Ich habe folgendes Problem: Ich führe eine Umfrage mit LimeSurvey durch und möchte vor der Auswertung schon mal mein R-Script schreiben. In dieser Umfrage sind 9 Fragegruppen enthalten. Jede Fragegruppe besteht aus einer Instruktion (F-Spalte) und 6 dazugehörigen Fragen (MC- und MP-Spalten). Die Fragegruppen werden jedoch randomisiert, damit jede Versuchsperson die Fragegruppen in unterschiedlicher Reihenfolge sieht. Die Rohdaten eines Testlaufs haben ich dann als CSV-Datei heruntergeladen und in RStudio eingespeist. Die Struktur der Spalten des Dataframes sieht jetzt so aus: [diverse Variablen], F1, MC1A, MC1B, MC1C, MP1A, MP1B, MP1C, F2, MC2A, MC2B, MC2C, MP2A, MP2B, MP2C, [...], F9, MC9A, MC9B, MC9C, MP9A, MP9B, MP9C, [diverse Variablen]. Eine F-Spalte und die nachfolgenden MC- und MP-Spalten bilden immer eine Fragegruppe; 7 Spalten entsprechen also einer Fragegruppe. In den MC- und MP-Spalten stehen die Antworten der Versuchspersonen. Die Bezeichnung der F-Spalten steht für die Position, in der die Instruktion bzw. Fragegruppe gezeigt wurde (F1 ist also immer die erste Instruktion bzw. die erste Fragegruppe, die präsentiert wurde). In den F-Spalten steht als Wert der eindeutige Code für die Instruktion, die präsentiert wurde, damit kann ich also zuordnen, bei welcher Versuchsperson welche Instruktion wann gezeigt wurde. Ein Beispiel: Bei Versuchsperson 1 ist F1=4, F2=6, F3=1 usw. Somit wurde Fragegruppe 4 als erstes präsentiert, Fragegruppe 6 als zweites, Fragegruppe 1 als drittes usw. Bei Versuchsperson 2 ist F1=9, F2=5, F3=7 usw. Somit wurde Fragegruppe 9 als erstes präsentiert, Fragegruppe 5 als zweites, Fragegruppe 7 als drittes usw.

Für meine Auswertung möchte ich die Randomisierung in meinem Datensatz quasi wieder auflösen. Ich möchte meine Fragegruppen (F-Spalte + 3 MC-Spalten + 3 MP-Spalten) also anhand der Werte in den F-Spalten pro Zeile wieder in die aufsteigende Reihenfolge bringen und abspeichern. Das muss nicht in den originalen Spalten geschehen und auch nicht in dem originalen Dataframe. Die Hauptsache ist, dass die ursprüngliche Reihenfolge für alle Personen wiederhergestellt wird. Ich muss also irgendwie die Spalten der Fragegruppen in R "gruppieren" und R zeilenweise die F-Spalten auslesen lassen und anhand dessen die Werte der F-, MC- und MP-Spalten in neue Variablen (meinetwegen F11-F19, MC11-19A, MC11-19B usw.) einfügen lassen, die dann der nicht-randomisierten Ordnung entsprechen.

Ich habe mal die aktuelle Struktur meines Dataframes und die Struktur, wie ich sie mir neu geordnet vorstelle, versucht in Excel darzustellen. Ich habe das Bild angehängt.
Bildschirmfoto 2024-04-02 um 14.31.58.png
Eigentlich würde ich annehmen, dass das für R ein Klacks ist, aber leider mangelt es mir und scheinbar auch ChatGPT dafür an Know-How. Ich hoffe, dass mir hier jemand weiterhelfen kann.

Ein großes "Danke" schon mal vorab!
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Werte eines Dataframes anhand einzelner Werte zeilenweise sortieren

Beitrag von bigben »

Hallo Dschounas,

herzlich willkommen im Forum.
Die absoluten Basics habe ich kennengelernt, aber die reichen scheinbar nicht für meine Zwecke.
Na dann wollen wir mal hoffen, dass Du Dein Licht da etwas unter den Scheffel stellst, denn das ist keine hier häufige und keine ganz banale Fragestellung.
Eigentlich würde ich annehmen, dass das für R ein Klacks ist,
Schon möglich, dass die genau passende Lösung dafür in R irgendwo herunterzuladen ist, aber das muss man erstmal finden. Aber der Vorteil von R ist ja, dass es nicht nur ein Statistikpaket, sondern auch eine Programmiersprache ist. Was so nicht vorgesehen ist, kann man sich innerhalb von R selbst basteln. Und ich würde das auch eher selbst basteln.
und scheinbar auch ChatGPT
Da möchtest Du Dich ohnehin nicht auf eine Antwort verlassen müssen.

Ich sitze gerade an einem Rechner, auf dem kein R läuft, gehe das ganze also mal konzeptuell an. Ist es für die Auswertung später noch wichtig, ob ein Fragenkomplex als erstes oder als drittes gestellt wurde? Wenn nicht, würde erstmal die ganzen F1, F2, F3 usw. Spalten zu einer einzigen Spalte F zusammenfassen. Ziel wäre eine Spalte F in der drin steht, welche Frage gestellt wurde gefolgt von einer Spalte MCA und einer MCB und einer MCC und natürlich einer Spalte id um herauszufinden, welche Person in dieser Spalte repräsentiert ist. Dann kann man nämlich in einem zweiten Schritt einfach filtern "mache eine Auswertung nur mit den Zeilen, bei denen in F der Wert 3 drin steht".

Code: Alles auswählen

id    F     MCA   MCB   MCC  
1     4     2     3     2         
1     6     1     1     1   
1     1     2     1     1   
1     2     ...
1     3     ...
2     9     3     1     2   
2     5     1     1     1   
2     3     ...
3     7     1     1     1   
...
(hoffentlich macht das klarer und verwirrt nicht mehr?)

Dafür sollte sich das rbind() Kommando oder das stack() Kommando nutzen lassen um alles in eine Spalte zu bringen. Danach kann man dann nach leicht den Spalten id und F sortieren und so wieder Ordnung herstellen. Bist Du mit cbind() vertraut oder bereit, Dich einzulesen?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Dschounas
Beiträge: 2
Registriert: Di Apr 02, 2024 1:55 pm

Re: Werte eines Dataframes anhand einzelner Werte zeilenweise sortieren

Beitrag von Dschounas »

Hallo Bernhard,

vielen Dank für die schnelle Antwort.

Das war der nötige Schubs, den ich gebraucht habe! Ich habe es nun so umsetzen können, wie du vorgeschlagen hast. Die Reihenfolge der Präsentation der Fragegruppen ist für die Analysen nicht relevant.

Viele Grüße
Jonas
Antworten