Hallo liebe R Gemeinde,
ich hätte eine Frage zu den „ifelse“-Befehl in R und ob er für das, was ich vorhabe, geeignet ist. Ich habe eine Spalte, in der die Dauer einer Verhaltensweise steht (z.B. 00:00:02). In einer anderen Spalte ist aufgeführt, ob eine Stressverhaltensweise gezeigt wurde (wenn eine Stressverhalten gezeigt wurde dann ist dies mit 1 markiert, wenn keine Verhaltensweise gezeigt wurde, steht eine 0 im Datensatz). Nun möchte ich gerne eine neue Spalte einfügen, in der, wenn ein Stresszeichen gezeigt wurde, die entsprechende Dauer eingetragen wird. Entsprechend, wenn kein Stressverhalten gezeigt wurde, also eine „0“ steht auch für die Dauer eine „0“ eingetragen wird.
Ich versuche es an einem konkreten Beispiel etwas verständlicher zu machen.
Kann man das mit dem „ifelse“ Befehl hinbekommen; wenn ja wäre meine Frage wie oder gibt es eine elegantere Lösung?
Vielen Dank schon mal im Voraus, ich bin echt am Verzweifeln.
Viele Grüße
Sarah
Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.
Re: Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.
Hallo Sarah,
wenn Deine Dauern als Zahlenwert hinterlegt sind, dann könntest Du die Spalten einfach miteinander multiplizieren, wenn das Texteinträge sind, dann natürlich nicht. Das ist nur ein Beispiel dafür, warum es selten schlau ist, Beispieldaten als Text einzubinden. Besser sind immer Beispieldaten in einer für R lesbaren Form.
Ifelse könnte man bei Strings so einsetzen und ich finde das gar nicht unelegant:
Du siehst, ich habe statt "ifelse(bsp$stress == 1,...." eine Abkürzung verwendet. In R ist der Wert 0 gleich FALSE und alle Zahlen über 0 sind TRUE:
LG,
Bernhard
wenn Deine Dauern als Zahlenwert hinterlegt sind, dann könntest Du die Spalten einfach miteinander multiplizieren, wenn das Texteinträge sind, dann natürlich nicht. Das ist nur ein Beispiel dafür, warum es selten schlau ist, Beispieldaten als Text einzubinden. Besser sind immer Beispieldaten in einer für R lesbaren Form.
Ifelse könnte man bei Strings so einsetzen und ich finde das gar nicht unelegant:
Code: Alles auswählen
bsp <- data.frame(duration = c("00:01", "00:02", "00:03", "00:04", "00:04"),
stress = c(0,1,0,1,0))
print(bsp)
#> duration stress
#> 1 00:01 0
#> 2 00:02 1
#> 3 00:03 0
#> 4 00:04 1
#> 5 00:04 0
bsp$neu <- ifelse(bsp$stress, yes = bsp$duration, no = "0")
print(bsp)
#> duration stress neu
#> 1 00:01 0 0
#> 2 00:02 1 00:02
#> 3 00:03 0 0
#> 4 00:04 1 00:04
#> 5 00:04 0 0
Code: Alles auswählen
0 == FALSE
#> [1] TRUE
1 == TRUE
#> [1] TRUE
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.
Hallo Bernhard,
vielen Dank für deinen Lösungsvorschlag. Ich habe es mittlerweile hinbekommen. Leider liegen die Zeiten als character Variable vor, was mich vor neue Probleme bei der Datenauswertung stellt aber das ist ein anderes Thema.
Und auch vielen Dank für den Hinweis mit den Beispieldaten, dies werde ich beim nächsten Mal berücksichtigen
Viele Grüße
Sarah
vielen Dank für deinen Lösungsvorschlag. Ich habe es mittlerweile hinbekommen. Leider liegen die Zeiten als character Variable vor, was mich vor neue Probleme bei der Datenauswertung stellt aber das ist ein anderes Thema.
Und auch vielen Dank für den Hinweis mit den Beispieldaten, dies werde ich beim nächsten Mal berücksichtigen
Viele Grüße
Sarah
Re: Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.
Hallo Sarah,
das ist gut und Du bekommst schneller die passende Antwort. Normalerweise lässt sich eine Zahlespalte die als character vorliegt mit as.numeric umwandeln:
Code: Alles auswählen
bsp1 <- c("0", "1", "2", "3.5")
bsp2 <- c("O", "1", "2", "3.5")
print(as.numeric(bsp1))
print(as.numeric(bsp2))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte