R zaman serisi vektörlerin alt kümeleri


25

Bir zaman serisine sahibim ve başlangıç, son ve sıklığı koruyarak bir zaman dizisi olarak tutarken alt kümesini belirlemek istiyorum.

Örneğin, bir zaman serim olduğunu varsayalım:

> 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     

Şimdi onu alt edeceğim:

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

Doğru sonuçları aldığımı fark et, ancak zaman serilerinden "tamamlamayı" kaybettim (yani başlangıç, bitiş, sıklık).

Bunun için bir işlev arıyorum. Bir zaman serisini alt kümelemek ortak bir senaryodur mu? Henüz bir tane bulamadığım için yazdığım bir işlev:

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

Bunu yapmak için gelişmeler veya daha temiz yollar hakkında duymak istiyorum. Özellikle, ben zor kodlama başlangıç ​​ve bitiş şeklinden hoşlanmıyorum. Kullanıcının keyfi bir boolean koşulu belirtmesine izin vermeyi tercih ederim.

Yanıtlar:


34

windowİşlevi kullanın :

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

2
Ayrıca pencerenin (qs, 2010, c (2010, 4)) <- 3 'ün qs' yi uygun şekilde değiştireceğini unutmayın.
mpiktas

6

Birden zaman serilerini birleştiren ve yapılacak eğer Ayrıca kullanışlı, zorunda olmasını istemez windowonları maç için almak için her birine ts.unionve ts.intersect.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.