我有一个看起来像这样的数据框:
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天吗?
答案 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。我们只是将日期用作名称,因此您仍可以将每个点与其日期关联起来。