Sie können eine der beiden Ansätze verwendet werden:
1) Unter Verwendung diff
wie folgt:
ifelse(diff(ts) > 0, 'up', ifelse(diff(ts) < 0, 'down', 'none'))
Ausgang ist:
Time Series:
Start = 2
End = 10
Frequency = 1
[1] up up up up none down down down down
2) Unter Verwendung der lag
Funktion aus dplyr
Paket:
ifelse(ts > lag(ts), 'up', ifelse(ts < lag(ts), 'down', 'none'))
Ausgang 0
ist wie folgt:
Time Series:
Start = 1
End = 10
Frequency = 1
[1] <NA> up up up up none down down down down
Sie können die erste NA ersetzen durch eine Standard im lag
oder separat verwenden.
EDIT: Basierend auf zusätzlichen Ausgang unten pro Kommentare gewünscht, ich bin der Bearbeitung die Antwort:
Sie können das Ergebnis der oben in einem Molche speichern - zum Beispiel, und extrahieren Sie die ursprünglichen Werte, die jedem gehören der die 'bewegt' wie folgt:
newts <- c('up', ifelse(diff(ts) > 0, 'up', ifelse(diff(ts) < 0, 'down', 'none')))
sapply(unique(newts), function(x) ts[newts == x])
Ausgabe ist wie folgt:
$up
[1] 1 2 3 4 5
$none
[1] 5
$down
[1] 4 3 2 1
Dies sind drei Listen. Sie können mit ihnen alles tun, was Sie wollen, oder sie zu anderen Datenstrukturen kombinieren.
HINWEIS: Ich bin mit dem newts
vor-schwebend, da das erste Element eine Waise ohne Bewegung ist. Je nachdem, wie Sie Dinge ausgeben möchten, sollten Sie diesen Wert nach Ihrem Geschmack anpassen.
Was ist Ihre erwartete Ausgabe? zwei Zeitreihen? Was hast du bisher versucht? –
@ColonBeauvel die erwartete Ausgabe wäre 3 Datenrahmen, einer für jedes Ergebnis (gefolgt von oben, gefolgt von unten und keine Änderung). Ich habe versucht, eine 'if' Funktion und die' split' Funktion zu verwenden, aber konnte die nächste Zeile nicht als Bedingung angeben – youjustreadthis