【问题标题】:Time Series Subsetting by Integers整数时间序列子集
【发布时间】:2017-07-04 13:42:56
【问题描述】:

我看过很多关于通过特定日期要求对时间序列进行子集化的帖子,但我不知道如何根据整数进行子集化。考虑:

# 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

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

【问题讨论】:

    标签: r window time-series subset


    【解决方案1】:

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

    1) 基础 这是一个基础解决方案,它对时间进行子集化,然后将其用作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) zoo 如果我们首先转换为 zoo,我们可以直接使用时间序列。转换后获取子集并转换回来(或省略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) 相同的答案。

    【讨论】:

    • 这很好用。我还可以使用 zoo 版本更轻松地对训练数据进行子集化。非常感激。接受
    猜你喜欢
    • 2016-09-06
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2018-11-02
    • 2017-01-31
    • 1970-01-01
    相关资源
    最近更新 更多