我有一个时间序列,我想对其进行子集化,同时将其保留为时间序列,保留开始、结束和频率。
例如,假设我有一个时间序列:
> 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))
}
我想听听有关改进或更清洁的方法来做到这一点。特别是,我不喜欢硬编码开始和结束的方式。我宁愿让用户指定任意布尔条件。