繁体   English   中英

时间序列整数子集

[英]Time Series Subsetting by Integers

我已经看到很多关于通过特定日期要求对时间序列进行子集化的帖子,但我无法弄清楚如何基于整数进行子集化。 考虑:

# create dummy data
data <- ts(seq_len(96), start=c(2009,1), f=12)
# create training data
training.set <- ts(data[1:(length(data)-8)], start=c(2009,1), frequency=12)

# I want to remove the last 8 values (or any integer) and use that as a test set while retaining the correct dates
test.set <- ts(data[(length(data)-8+1):length(data)])
test.set # start/end aren't retained for the test set

Time Series:
Start = 1 
End = 8 
Frequency = 1 
[1] 89 90 91 92 93 94 95 96

我知道我可以明确地在测试集上指定新的开始/结束日期,但这对我的使用不起作用。 我正在尝试找到一种自动执行此操作的方法,因此我正在编写的函数可以根据输入时间序列处理任何日期,并根据训练和测试集的子集(基于任何整数<输入系列的长度)。

请注意,您不能拥有任意子集,因为"ts"类只能表示规则间隔的序列; 但是,您可以对间隔进行子集化。

1)base这是一个基本解决方案,它将时间子集化,然后将其用作window输入。 (如果在系列结束时间隔未结束,我们也必须使用end= 。)

window(data, start = tail(time(data), 8)[1])

赠送:

     May Jun Jul Aug Sep Oct Nov Dec
2016  89  90  91  92  93  94  95  96

2)动物园如果我们第一次转换到动物园,我们可以直接使用时间序列。 转换后获取子集并转换回(或省略as.ts将其保留为动物园对象并使用它):

library(zoo)

as.ts(tail(as.zoo(data), 8))

2a)这是(2)的变体:

as.ts(as.zoo(data)[seq(to = length(data), length = 8)])

(2)和(2a)给出与(1)相同的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM