Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.

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

Moderatoren: EDi, jogo

Antworten
Sarah17
Beiträge: 2
Registriert: Do Dez 15, 2022 9:04 pm

Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.

Beitrag von Sarah17 »

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.
tab 2.jpg
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
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.

Beitrag von bigben »

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:

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
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:

Code: Alles auswählen

0 == FALSE
#> [1] TRUE
1 == TRUE
#> [1] TRUE
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Sarah17
Beiträge: 2
Registriert: Do Dez 15, 2022 9:04 pm

Re: Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.

Beitrag von Sarah17 »

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
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Eine neue Spalte in einem R-Datensatz erzeugen, deren Werte sich aus anderen Spaltenwerten des Datensatzes ergeben.

Beitrag von bigben »

Sarah17 hat geschrieben: So Dez 18, 2022 2:22 pmUnd auch vielen Dank für den Hinweis mit den Beispieldaten, dies werde ich beim nächsten Mal berücksichtigen :-)
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))
Das klappt sehr gut mit bsp1 aber nicht mit bsp2. Das liegt daran, dass ein einziger Eintrag in bsp2 unpassend ist. Welcher das ist, das muss man dann herausfinden. Vielleicht hast Du es schon gesehen. Eine Funktion mit der man das unpassende Element herausfinden kann habe ich hier gepostet: viewtopic.php?t=3516

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten