Seite 1 von 1

Variable mit if-Bedingung (?) erstellen

Verfasst: Fr Apr 12, 2019 3:20 pm
von MJ95
Hey ihr Lieben,

ich versuche gerade in einem Datensatz eine zusätzliche Variable zu erstellen.
Diese soll abhängig von der Ausprägung einer anderen Variablen verschiedene Werte annehmen.
Hier schon mal ein Versuch, der allerdings offensichtlich nicht funktioniert.
Der mutate-Befehl stammt aus dem Package (dplyr).
Letztendlich soll die neue Variable "Speed" im Datensatz d3 angelegt werden und je nach Wert der Bearbeitungszeit (TIME_SUM) die Ausprägungen fast, slow oder norm annehmen.

Code: Alles auswählen

 d3<-mutate(d3,Speed=
         {  if(d3$TIME_SUM<334.89)
           {"fast"}
           else if (d3$TIME_SUM>1672.17)
           {"slow"}
           else 
           {"norm"}}
              )

Code: Alles auswählen

Warning messages:
1: In if (d3$TIME_SUM < 334.89) { :
  the condition has length > 1 and only the first element will be used
2: In if (d3$TIME_SUM > 1672.17) { :
  the condition has length > 1 and only the first element will be used
Anscheinend ist es also nicht so einfach und ich kann die if-Schleife nicht in Kombination mit dem mutate-Befehl nutzen. Oder ich hab einfach irgendwo nen Fehler in der Syntax.

Habt ihr ne Idee, wie ich das alternativ lösen könnte?
Viele Grüße
Martin

Re: Variable mit if-Bedingung (?) erstellen

Verfasst: Fr Apr 12, 2019 3:40 pm
von jogo
Hallo Martin,

willkommen im Forum!
Die Bedinung bei if (...) ... sollte kein Vektor sein (siehe die entsprechende Warnung).
Da gibt es verschiedenen Möglichkeiten für eine Lösung:
cut() : ist ein ordentliches Geschütz - ich empfinde es oft schwierig, die Übergänge (bezüglich Gleichheit oder nicht) wunschgemäß zu setzen.
ifelse(..., ..., ...) : kann bei Deiner geringen Anzahl von zu bildenden Gruppen geeignet sein.
per logical index die passenden Elemente setzen : geht immer:

Code: Alles auswählen

d3$Speed <- "norm"
d3$Speed[d3$TIME_SUM<334.89]  <- "fast"
d3$Speed[d3$TIME_SUM>1672.17] <- "slow"
Leider kann ich Dir keine dplyr-Lösung anbieten, aber base geht doch auch, oder?

Gruß, Jörg
p.s.:
woher hast Du den Begriff if-Schleife :?:

Re: Variable mit if-Bedingung (?) erstellen

Verfasst: Fr Apr 12, 2019 3:48 pm
von MJ95
Hey, vielen Dank für die schnelle Hilfe!

Manchmal ist die Antwort doch einfach als gedacht. Schön einfach und schlank, perfekt :D

Den Begriff der if-Schleife hab ich hier her: http://www.if-schleife.de
Das passiert, wenn Menschen wie ich wenig Ahnung von Programmierung haben, aber trotzdem Fachbegriffe nutzen :D

Viele Grüße
Martin

Re: Variable mit if-Bedingung (?) erstellen

Verfasst: Fr Apr 12, 2019 4:18 pm
von jogo
MJ95 hat geschrieben: Fr Apr 12, 2019 3:48 pm Manchmal ist die Antwort doch einfacher als gedacht. Schön einfach und schlank, perfekt :D

Den Begriff der if-Schleife hab ich hier her: http://www.if-schleife.de
Das passiert, wenn Menschen wie ich wenig Ahnung von Programmierung haben, aber trotzdem Fachbegriffe nutzen :D
ok, ich vermute, dass Du die angegebene Seiten nun gründlich gelesen hast. :D
Es hätte ja sein können, dass Du den Begriff schon vorher aus irgendeiner Quelle aufgegriffen hast (Buch/Skript/...).

Ich habe auch noch etwas zum Begriff Syntax: https://de.wikipedia.org/wiki/Syntaxfehler
Das bedeutet, dass jedes Codestück, das abgearbeitet werden kann, zwangsläufig syntaktisch richtig ist.

Dein Problem mit dem if() entsteht erst bei der Abarbeitung, weil die Bedingung ein Vektor ist.
(Hätte Dein Dataframe d3 nur eine Zeile, hätte R auch bei der Abarbeitung nichts zu meckern.)

Gruß, Jörg