Untersetzen von R Zeitreihenvektoren

25

Ich habe eine Zeitreihe und möchte sie unter Beibehaltung von Anfang, Ende und Häufigkeit als Zeitreihe unterteilen.

Angenommen, ich habe eine Zeitreihe:

> qs <- ts(101:110, start=c(2009, 2), frequency=4)
> qs
     Qtr1 Qtr2 Qtr3 Qtr4
2009       101  102  103
2010  104  105  106  107
2011  108  109  110     

Jetzt werde ich es unterteilen:

> qs[time(qs) >= 2010 & time(qs) < 2011]
[1] 104 105 106 107

Beachten Sie, dass ich die richtigen Ergebnisse erhalten habe, aber die "Umhüllungen" aus der Zeitreihe (nämlich Anfang, Ende, Häufigkeit) verloren habe.

Ich suche dafür eine Funktion. Ist das Untergruppieren einer Zeitreihe nicht ein häufiges Szenario? Da ich noch keine gefunden habe, habe ich hier eine Funktion geschrieben:

subset.ts <- function(data, start, end) {
  ks <- which(time(data) >= start & time(data) < end)
  vec <- data[ks]
  ts(vec, start=start(data) + c(0, ks[1] - 1), frequency=frequency(data))
}

Ich würde gerne etwas über Verbesserungen oder sauberere Methoden erfahren. Insbesondere mag ich es nicht, wie ich Start und Ende fest programmiere. Ich möchte lieber, dass der Benutzer eine beliebige boolesche Bedingung angibt.

David J.
quelle

Antworten:

34

Verwenden Sie die windowFunktion:

> window(qs, 2010, c(2010, 4))
     Qtr1 Qtr2 Qtr3 Qtr4
2010  104  105  106  107
Shane
quelle
2
Beachten Sie auch, dass Fenster (qs, 2010, c (2010, 4)) <- 3 die qs entsprechend ändert.
mpiktas
6

Auch nützlich, wenn Sie mehrere Zeitreihen kombinieren und wollen nicht zu haben haben , windowjeden zu ihnen passen zu bekommen, ts.unionund ts.intersect.

hgcrpd
quelle