Aggregation der Zeitreihen in R
Habe ich Folgendes OHLC-Daten (3-Minuten-Intervallen)
library(tseries)
library(xts)
library(quantmod)
> str(tickmin)
An ‘xts’ object from 2010-06-30 15:47:00 to 2010-09-08 15:14:00 containing:
Data: num [1:8776, 1:5] 9215 9220 9205 9195 9195 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:5] "zv.Open" "zv.High" "zv.Low" "zv.Close" ...
Indexed by objects of class: [POSIXct,POSIXt] TZ:
xts Attributes:
NULL
>tickmin
2010-09-08 15:02:00 20
2010-09-08 15:04:00 77
2010-09-08 15:08:00 86
2010-09-08 15:11:00 7
2010-09-08 15:14:00 43
> start(tickmin)
[1] "2010-06-30 15:47:00 EDT"
> end(tickmin)
[1] "2010-09-08 15:14:00 EDT"
Ich versuche zu aggregieren mithilfe der folgenden:
> by <-timeSequence(from = start(tickmin), to = end(tickmin), format="%Y-%m-%d %H%M", by = "day")
>by
[61] [2010-08-29 19:47:00] [2010-08-30 19:47:00] [2010-08-31 19:47:00]
[64] [2010-09-01 19:47:00] [2010-09-02 19:47:00] [2010-09-03 19:47:00]
[67] [2010-09-04 19:47:00] [2010-09-05 19:47:00] [2010-09-06 19:47:00]
[70] [2010-09-07 19:47:00]
> aggregate(Vo(tickmin),by,sum)
Error: length(time(x)) == length(by[[1]]) is not TRUE
..würde mich über Vorschläge, wie ich den Fehler beheben kann.
Bitte geben Sie an, welches Paket(en), die Sie verwenden und die Struktur Ihrer Objekte. Oder machen Sie uns noch besser, die post, eine reproduzierbare Beispiel.
wenn Sie brauchen, Besonderheiten der Beispiel, ich kann es tun, sonst ist es eine Menge von Daten für ein reproduzierbares Beispiel.
-1 Deinem Beispiel ist völlig unklar.
wenn Sie brauchen, Besonderheiten der Beispiel, ich kann es tun, sonst ist es eine Menge von Daten für ein reproduzierbares Beispiel.
-1 Deinem Beispiel ist völlig unklar.
str(tickmin)
zeigt eine xts-Objekt mit 5 Spalten, noch tickmin
hat nur eine Spalte, wenn Sie es drucken auf die nächste Zeile. Die timeSequence
Funktion nicht vorhanden, in jedem der 3 Pakete, die Sie Liste.
InformationsquelleAutor itcplpl | 2012-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich erkläre dir deine Fehler und sagen Sie, wie es zu beheben, aber es gibt eine bessere Weise, das zu tun, was Sie tun. So stellen Sie sicher, Lesen Sie meine gesamte Antwort!
Aus der Fehlermeldung, die Länge Ihres
by
ist nicht die gleiche Länge wieVo(tickmin)
.Sie generieren Ihre
by
haben einen Wert pro entsprechenden Wert intickmin
mit dem Tag.Hier als Beispiel Erzeuge ich eine
xts
Objekt:welche ergibt:
Zugriff auf die Daten von
xts.ts
Sie verwendenindex(xts.ts)
gibt eine ganze Reihe von strings, die Datum, z.B."2010-07-30 00:00:00 EST"
.Runden diese auf den nächsten Tag, die Sie verwenden können
as.Date
:Lösung für Ihr problem
Dann zu verwenden
aggregate
Sie tun:Bessere Lösung für Ihr problem
Den
xts
Paket hat Funktionenapply.daily
,apply.monthly
usw. (verwenden Siels('package:xts')
um zu sehen welche Funktionen es hat-möglicherweise gibt es diejenigen, die Sie interessiert sind).apply.daily(x,FUN,...)
hat genau, was Sie wollen. Sehen?apply.daily
.Um es zu verwenden können Sie tun:
Oder wenn Ihr
xts
Objekt weitere Spalten wieOpen
,Close
etc, die Sie tun könnenapply.daily(xts.ts, function(x) sum(Vo(x)))
.Beachten Sie, dass die Antworten etwas anders mit
apply.daily
zu denaggregate ... as.Date
Methode. Das ist, weilapply.daily
geht täglich vonstart(xts.ts)
zuend(xts.ts)
(mehr oder weniger) in der Erwägung, dassaggregate
ging einfach durch den Tag von Mitternacht zu Mitternacht.Blick auf Ihre Frage,
apply.daily
scheint zu passen die meisten genau, was Sie tun möchten (und ist mitxts
sowieso, warum also nicht nutzen?)die erste Lösung berechnet eine andere Antwort für jeden Tag als der zweite Ansatz. Die zweite scheint zu funktionieren.
Als.Date enthält 20 min und 40 min nach Mitternacht im vorherigen Tages.
InformationsquelleAutor mathematical.coffee