2017-06-21 5 views
0

Ich habe sec-by-sec Daten und möchte eine neue Variable "Kategorie" basierend auf einigen Bedingungen auf Variable "Beschleunigung" erstellen. Um genau zu sein, wenn "Beschleunigung < = -2 OR (Beschleunigung für die aktuelle Sekunde < -1 & Beschleunigung für die vorherige Sekunde < -1 & Beschleunigung für die vorherigen zwei Sekunden < -1), dann" Kategorie "gleich 1, andernfalls Es ist 0.Include lag() in ifelse() -Funktion in R

Ich vermute, ich sollte Lag() irgendwo im Code verwenden, um die Zeitverzögerung zu berücksichtigen, aber es funktioniert einfach nicht ... Kann jemand auf meinen Fehler hinweisen und mich korrigieren? Danke. ..

df$category <- ifelse(df$acceleration<=-2 | 
        (df$acceleration<-1 & lag(df$acceleration, 1)<-1 & 
         lag(df$acceleration, 2) < -1), 1,0) 
+1

Sei vorsichtig mit weniger als negativen Zahlen, du willst '<-1' nicht den Zuweisungsoperator' <-1'. – Gregor

Antwort

0

Vielleicht möchten Sie Ihre Datenrahmen ein wenig manipulieren:

df.lag <- df %>% 
      mutate(acc1=lag(acceleration)) %>% #Acceleration of previous time step 
      mutate(acc2=lag(acc1))    #Acceleration of two steps before 

Dann können Sie Ihre if-statement viel einfacher (oder zumindest Reiniger) gelten:

df$category <- ifelse(df.lag$acceleration <= -2 | 
        (df.lag$acceleration < -1 & df.lag$acc1 < -1 & df.lag$acc2 < -1), 1, 0) 

Sie können von df.lag von rm(df.lag) loszuwerden.