Anwendung ifelse-Befehl

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

Moderatoren: EDi, jogo

Antworten
Laurena234
Beiträge: 8
Registriert: Sa Jun 03, 2023 12:36 pm

Anwendung ifelse-Befehl

Beitrag von Laurena234 »

Hallo zusammen,

ich habe eine Frage zu der Anwendung der ifelse Funktion in R. Erstmal ein paar Kontextinfos:

Ich muss für meine Abschlussarbeit eine dreifaktorielle Anova mit Messwiederholung im 2x3x2 Design durchführen. Ich habe in meiner Studie Kinder zweier Altersgruppen getestet (= erste UV), die einer Schlafbedingung, Wachbedingung oder Kontrollgruppe (= zweite UV) zugeordnet wurden. Alle Kinder wurden hintereinander mit zwei verschiedenen Spielzeugen getestet, einmal mit und einmal ohne elterlicher Unterstützung (= dritte, messwiederholte UV), die Reihenfolge wann mit/ohne Unterstützung getestet wurde, war dabei randomisiert. Nun habe ich alle Testwerte in einer Tabelle zusammengefügt erhalten. In der Tabelle steht allerdings nur, welcher Testwert bei welchem Spielzeug herauskam, aber nicht bei welchem Spielzeug elterliche Unterstützung eingesetzt wurde und bei welchem nicht (da das wiegesagt bei jedem Kind variierte, bei welchem Spielzeug die Unterstützung eingesetzt wurde und bei welchem nicht). Die einzige Info, die ich zusätzlich in der Tabelle habe, ist die Angabe eines Order Codes (1-4) für jeden Probanden. Die Order enthält die Info, welches Spielzeug wann eingesetzt wurde sowie wann (keine) elterliche Unterstützung stattfand (zb. steht die Ausprägung 1 dafür dass zuerst Spielzeug A und dann Spielzeug B eingesetzt wurde und bei Spielzeug A elterliche Unterstützung stattfand, Ausprägung 2 steht dafür dass auch zuerst Spielzeug A und dann B eingesetzt wurde aber bei Spielzeug B elterliche Unterstützung stattfand usw.)

Nun muss ich in R zwei neue Variablen erstellen, eine für den Testscore mit und eine für den Testscore ohne elterliche Unterstützung. Diese Variablen sollen dann die Werte aller VP einmal mit und einmal ohne elterliche Unterstützung enthalten. Die Idee ist, dass ich R quasi sage, dass er bei jedem Kind den erhaltenen Testwert für Spielzeug 1 und 2 je nach Ausprägung des Order Codes bei dem Kind einer der beiden neuen Variablen zuweisen soll. Aber ich bin noch nicht darauf gekommen, wie ich das in dem Befehl genau ausdrücke.

Kann mir hier jemand weiterhelfen? Das wäre wirklich super, da ich gerade ziemlich auf dem Schlauch stehe!

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

Re: Anwendung ifelse-Befehl

Beitrag von bigben »

Hallo Laurena,

Bitte poste ein konkretes Datenbeispiel. Bei solchen verbalen Beschreibungen passiert es viel zu schnell, dass man sich die Daten falsch vorstellt und dann Lösungen programmiert, die niemand brauchen kann. Poste ein paar fiktive oder reale Datensätze, entweder als R Code oder als CSV Datei, dann helfen wir nochmal bereitwilliger.

Sehe ich das richtig, dass das Spielzeug, also A oder B, gar nicht in die ANOVA eingehen soll? 2x3x2 steht ja für Alter x Schlafkondition x Elternhilfe. Wo bleibt da die Spielzeugwahl? Oder ist die egal für den Testscore?

Verschiedene Optionen um Daten umzucodieren habe ich mal in einem FAQ- Thread gesammelt. Kein Abmnspruch auf Vollständigkeit: viewtopic.php?t=2162

Für Dein konkretes Problem sollte ifelse aber sehr geeignet sein. Wo kommst Du damit nicht weiter?

GLG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Laurena234
Beiträge: 8
Registriert: Sa Jun 03, 2023 12:36 pm

Re: Anwendung ifelse-Befehl

Beitrag von Laurena234 »

Hallo Bernhard,

danke für die Antwort, im Anhang habe ich nun ein Datenbeispiel eingefügt (Nap = Schlaf, no Nap = kein Schlaf).
Anbei auch nochmal die genaue Zuordnung der Order Variable:
1 = zuerst Spielzeug A mit Elternunterstützung, dann Spielzeug B ohne Elternunterstützung
2 = Spielzeug A ohne Elternunterstützung, Spielzeug B mit Elternunterstützung
3 = Spielzeug B mit Elternunterstützung, Spielzeug A ohne Elternunterstützung
4 = Spielzeug B ohne Elternunterstützung, Spielzeug A mit Elternunterstützung

Genau, das Spielzeug soll nicht in die ANOVA eingehen, es ist für meine Hypothesen nur relevant, ob elterliche Unterstützung (neben dem Alter und Schlaf) einen Unterschied in der (metrisch skalierten) AV macht (ich teste die Gedächtnisleistung von Kleinkindern).

Danke für den Link, mir ist irgendwie trotzdem noch nicht klar, wie ich den ifelse Befehl auf mein individuelles Beispiel anwenden soll.
Ich muss anhand der Ausprägung der Order Variable zwei neue Variablen erstellen, eine die die Testscores aller Probanden für die "Elternunterstützung" enthält und eine mit den Testscores aller Probanden "ohne Elternunterstützung".
Der if-Befehl ist ja allgemein so aufgebaut: Testscore_Elternunterstützung <- if(Test, ja, nein). Bei dem Testteil müsste ich dann die Ausprägung der Order angeben, aber wie kann ich es danach in R so formulieren, dass er zb. bei der Order Ausprägung 1 und 4 alle Werte der Probanden in Spielzeug A der neuen Variable Testscore_Elternunterstützung zuordnet (und dasselbe dann mit Spielzeug B für die Order Ausprägung 2 und 3 macht)?

Viele Grüße
Laurena
Dateianhänge
Datenbeispiel.csv
(551 Bytes) 28-mal heruntergeladen
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Anwendung ifelse-Befehl

Beitrag von bigben »

Hallo Laurena,
Bei dem Testteil müsste ich dann die Ausprägung der Order angeben, aber wie kann ich es danach in R so formulieren, dass er zb. bei der Order Ausprägung 1 und 4 alle Werte der Probanden in Spielzeug A der neuen Variable Testscore_Elternunterstützung zuordnet
Das entspricht in der Aussagenlogik einem "oder". Wenn Order == 1 ist oder wenn Order == 4 ist. Das logische "oder" wird in R so ausgedrückt: |

Schau mal, ob der folgende Code macht, was Du suchst:

Code: Alles auswählen

d <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1842")
str(d)  # immer kontrollieren, dass richtig eingelesen 
head(d)

d$mit_Eltern <- ifelse(d$Order == 1 | d$Order == 4,
                       yes = d$Testscore_Spielzeug_A,
                       no  = d$Testscore.Spielzeug_B)
d$ohne_Eltern<- ifelse(d$Order == 2 | d$Order == 3,
                       yes = d$Testscore_Spielzeug_A,
                       no  = d$Testscore.Spielzeug_B)
print(d)
Eine alternative Schreibweise ist das %in%:

Code: Alles auswählen

d$mit_Eltern <- ifelse(d$Order %in% c(1, 4),
                       yes = d$Testscore_Spielzeug_A,
                       no = d$Testscore.Spielzeug_B)
d$ohne_Eltern<- ifelse(d$Order %in% c(2, 3),
                       yes = d$Testscore_Spielzeug_A,
                       no = d$Testscore.Spielzeug_B)
Nicht ganz sicher bin ich mir, wie das mit der Messwiederholung ist. Hat jedes Kind insgesamt zweimal gespielt? Hat also jedes Kind entweder geschlafen oder nicht geschlafen oder war baseline?

Anraten würde ich, in Deinen Spaltennamen entweder durchgehend den Unterstrich oder durchgehend den Punkt zu nehmen. Das geht bei Deinen Testscore*Spielzeug ein wenig durcheinander und kann zu Fehlern führen, die nur schwer zu entdecken sind.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Laurena234
Beiträge: 8
Registriert: Sa Jun 03, 2023 12:36 pm

Re: Anwendung ifelse-Befehl

Beitrag von Laurena234 »

Hallo Bernhard,

deine Beispiel-Befehle gehen auf jeden Fall in die richtige Richtung, danke dafür.
Ich habe sie gerade ausprobiert - leider erscheint bei beiden eine Fehlermeldung, dass das Objekt "yes" nicht gefunden wurde. Im Anahng ein Screenshot (nicht wundern, dass die Variablen und der Datensatz dort anders heißen, im Forum habe ich sie der Verständlichkeit wegen einfacher ausgedrückt).
Ich bin schon dabei zu recherchieren, was ich falsch gemacht habe, vielleicht hast du auch eine Idee?

Jedes Kind hat beim Test mit beiden Spielobjekten gespielt genau und einmal war Elternunterstützung dabei und einmal nicht (= der messwiederholte Faktor). Jedes Kind wurde aber entweder der Schlaf- oder Wach- oder Baselinebedingung zugeordnet (= der nicht-messwiederholte Faktor). Dieser Faktor bezieht sich darauf, was die Kinder vor dem Test gemacht haben (also ob sie geschlafen haben oder wachblieben etc.)

LG
Laurena
Dateianhänge
R Screenshot.pdf
(237.74 KiB) 24-mal heruntergeladen
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Anwendung ifelse-Befehl

Beitrag von bigben »

Hallo Laurena,

wir haben hier im Forum code-Tags, mit denen Du R-Befehle und die Antworten von R sehr schön auch ohne Screenshots posten kannst. Das hat verschiedene Vorteile.

Das Problem ist, dass yes und no die Namen von Argumenten sind. Diesen Argumenten wird etwas zugewiesen. Sie werden nicht mit etwas verglichen:
"=" ist ein Zuweisungsoperator
"==" ist ein Vergleich.

Es muss heißen

Code: Alles auswählen

 yes = d$Testscore_Spielzeug_A,
 no = d$Testscore.Spielzeug_B)
nicht

Code: Alles auswählen

 yes == d$Testscore_Spielzeug_A,
 no == d$Testscore.Spielzeug_B)

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Laurena234
Beiträge: 8
Registriert: Sa Jun 03, 2023 12:36 pm

Re: Anwendung ifelse-Befehl

Beitrag von Laurena234 »

Hallo Bernhard,

oh man, das hätte mir auch auffallen müssen, ganz lieben Dank für den Hinweis.
Jetzt klappt die Ausführung des Befehls einwandfrei und die neuen Spalten in der Tabelle enthalten genau die Info, die ich haben will!
Prima! Und nochmal herzlichen Dank für die Hilfe :-)

Liebe Grüße
Laurena
Antworten