ich einen Datenrahmen, die ein bisschen wie folgt aussieht:Wrapping kumulative Summe aus einem Satz Reihe in R beginnend
wt <- data.frame(region = c(rep("A", 5), rep("B", 5)), time = c(1:5, 1:5),
start = c(rep(2,5), rep(4, 5)), value = rep(1, 10))
Die Werte in der value
Spalte beliebige Zahlen sein könnten (ich in einem sehr großen arbeite Datensatz), aber jede Region wird über eine Zeitreihe mit gleicher Länge sein und einen einzigen Startpunkt haben.
Ich möchte eine kumulative Summe innerhalb jeder Region erstellen, die am Anfangspunkt beginnt, sich in der Zeitreihe vorwärts zu bewegen und in die Zeilen vor dem Startpunkt in der Zeitreihe zu springen.
Die vollständige Datentabelle, mit dem Ergebnis bestimmt, würde wie folgt aussehen:
region time start value result
A 1 2 1 5
A 2 2 1 1
A 3 2 1 2
A 4 2 1 3
A 5 2 1 4
B 1 4 1 3
B 2 4 1 4
B 3 4 1 5
B 4 4 1 1
B 5 4 1 2
Eine einfache Umwandlung der Zeitspalte von cumsum
gefolgt funktioniert nicht, da die Funktion über Zeile, um sie interessiert und nicht jeder bestimmter Faktor.
, die mit im Auge, ich auf einer riesige Datentabelle am Betrieb und Laufzeit ist absolut ein Anliegen, so dass jede Lösung muss vermeiden Nachbestellung Reihen.
Ideen, wie man das macht? Danke im Voraus.
EDIT: Betrachten sich Zeit, um einen Zyklus wie Stunden an einem Tag sein - und zum Beispiel, wenn die Startzeit ist 2, das heißt Beobachtungen an einer Instanz von Zeit 2 und enden am nächsten Start 1.
Die Logik von 'Ergebnis ist nicht klar – akrun
@akrun Anhäufung der Spalte' Wert 'beginnt wo 'Zeit == Start' und endet wo' Zeit == Start-1'. Wenn die Startzeit nicht 1 ist, sollte die Akkumulation in die erste Zeile der Region übertragen werden. – ctenochaetus
In diesem Fall scheint die erwartete Ausgabe falsch zu sein. Wenn wir die Region 'A' nehmen, dann ist Zeit == Start ist die zweite Reihe, und Zeit == Start-1 ist die 3. Reihe, – akrun