Eine Stichprobe von Daten, die ich habe.
hour <- c(rep(0,5), rep(1,5),rep(0,5), rep(1,5)) rain <- c(rep(0.1,10),rep(0.0,10)) df1<-data.frame(rain,hour) df1$csum <- with(df1, ave(df1$hour, cumsum(df1$hour == 0), FUN = cumsum))
logisch basierend auf Zeilen darunter und oben in anderen Vektor
Schritte:
1. Finden Werte von 1 in 'csum' (6/16).
2. Sehen Sie sich die Werte 3 Reihen oben und 5 unten in 'Regen' an (1: 9/11: 19 in diesem Fall), um die durch 1. Schritt in var 'csum' festgelegte Position,
3. wenn ihre Summe ist > = 0,1; als erste drei Werte von 1 in var 'Stunde' (6: 8) werden in 0 umgewandelt, im zweiten Fall bleiben sie gleich, weil Summe 0 ist.
Erwartete Ausgabe: Erste drei Werte von 1 in DF1 $ Stunde geschaltet 0
hour = c(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1)
so dass Sie nur einmal diese Schritte ausführen zu wollen? wenn "1" zum ersten Mal auftritt. –
Wenn ich es richtig verstanden habe, genügt ein einfaches 'which()' und ein 'if()' –
genau. 1 bedeutet eigentlich, dass einige andere Kriterien erfüllt wurden und dann schaue ich in Regenzeit im Zeitfenster von 8 Stunden; Wenn es keinen nennenswerten Regen gab (0,1 oder mehr), werden die ersten drei Stunden (Werte von 1) nicht berücksichtigt. –