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

我想听听有关改进或更清洁的方法。特别是,我不喜欢对开始和结束进行硬编码的方式。我宁愿让用户指定一个任意的布尔条件。

Answers:


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 2011年

6

也有用,如果要结合多个时间序列和不想要有对window每一个让他们匹配,ts.unionts.intersect

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.