R時系列ベクトルのサブセット化


25

時系列があり、開始、終了、および頻度を保持しながら、時系列として保持しながらサブセット化します。

たとえば、時系列があるとします。

> 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     

今、私はそれをサブセットします:

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

正しい結果が得られましたが、時系列(つまり、開始、終了、頻度)から「ラッピング」を失ったことに注意してください。

このための機能を探しています。時系列のサブセット化は一般的なシナリオではありませんか?私はまだ見つけていないので、ここに私が書いた関数があります:

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

これを改善する方法や、よりクリーンな方法についてお聞きしたいのですが。特に、開始と終了をハードコーディングする方法が好きではありません。むしろ、ユーザーが任意のブール条件を指定できるようにします。

回答:


34

次のwindow機能を使用します。

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

2
また、window(qs、2010、c(2010、4))<-3はそれに応じてqsを変更することに注意してください。
mpiktas

6

また、有用な、あなたが複数の時系列を組み合わせているとしなければならないしたくない場合は、windowそれらを一致させるために得るために一人一人、ts.unionts.intersect

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.