Sottostazione di vettori di serie storiche R


25

Ho una serie temporale e voglio sottoinsediarla mantenendola come serie temporale, preservando l'inizio, la fine e la frequenza.

Ad esempio, supponiamo che io abbia una serie temporale:

> 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     

Ora lo sottoporrò:

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

Si noti che ho ottenuto i risultati corretti, ma ho perso i "wrapping" delle serie temporali (ovvero inizio, fine, frequenza).

Sto cercando una funzione per questo. Il sottoinsieme di una serie storica non è uno scenario comune? Dato che non ne ho ancora trovato uno, ecco una funzione che ho scritto:

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))
}

Mi piacerebbe conoscere miglioramenti o modi più puliti per farlo. In particolare, non mi piace il modo in cui sto programmando e codificando. Preferirei che l'utente specificasse una condizione booleana arbitraria.

Risposte:


34

Usa la windowfunzione:

> window(qs, 2010, c(2010, 4))
     Qtr1 Qtr2 Qtr3 Qtr4
2010  104  105  106  107

2
Si noti inoltre che la finestra (qs, 2010, c (2010, 4)) <- 3 cambierà le q di conseguenza.
mpiktas,

6

Utile anche se si stanno combinando più serie temporali e non si desidera dovere avere windowtutte per farle corrispondere, ts.unione ts.intersect.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.