J'ai une série chronologique et je souhaite la sous-définir tout en la conservant sous forme de série chronologique, en préservant le début, la fin et la fréquence.
Par exemple, disons que j'ai une série chronologique:
> 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
Maintenant, je vais le sous-ensemble:
> qs[time(qs) >= 2010 & time(qs) < 2011]
[1] 104 105 106 107
Notez que j'ai obtenu les bons résultats, mais j'ai perdu les "enveloppements" de la série chronologique (à savoir début, fin, fréquence.)
Je cherche une fonction pour ça. Le sous-ensemble d'une série temporelle n'est-il pas un scénario courant? Comme je n'en ai pas encore trouvé, voici une fonction que j'ai écrite:
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))
}
J'aimerais entendre des améliorations ou des façons plus propres de procéder. En particulier, je n'aime pas la façon dont je code en dur le début et la fin. Je préfère laisser l'utilisateur spécifier une condition booléenne arbitraire.
la source
Également utile, si vous combinez plusieurs séries chronologiques et que vous ne voulez pas avoir à les avoir
window
toutes pour les faire correspondre,ts.union
etts.intersect
.la source