根据每周数据创建TS对象

时间:2018-10-18 18:08:44

标签: r time-series

我有一个看起来像这样的数据框:

            Value
2002-09-01  0.4
2002-09-08  0.2
...............
2017-10-08  0.6
2017-10-15  0.5

数据框中仅表示9月和10月,而10月仅包括10月1日至15日,因此2002年至2017年每年都有一个半月的数据。

我现在需要将这些值转换为ts对象。

我正在尝试这样做:

t = ts(df$Value, frequency = 7, start = as.Date('2002-09-01'), end = as.Date('2017-10-15')

但这返回:

invalid time series parameters specified

这是因为10月可能只有15天吗?

2 个答案:

答案 0 :(得分:1)

是的,大多数时间序列库都要求在给定时间段内对数据进行均匀采样。

要做的一件事是估算这些值,即用最后三个周期的平均值替换缺失的值。我建议使用Cross Validated post以获得一些想法,还建议您使用库imputeTS

答案 1 :(得分:1)

假设我们有

tt <- c(seq(as.Date("2002-09-01"), length = 7, by = 7), 
        seq(as.Date("2003-09-01"), length = 7, by = 7))
x <- 1:14

然后我们可以将其表示为这个动物园系列:

library(zoo)
z <- zoo(x, tt)

这里的日期不是固定间隔的,但是如果您不得不将其强制成固定间隔的ts系列,那么假设每年有7个点,则一种方法是:

xser <- ts(setNames(x, tt), start = 2002, freq = 7)

这将表示y年中的7点,使用的时间为y,y + 1/7,...,y + 6/7。我们只是将日期用作名称,因此您仍可以将每个点与其日期关联起来。