如何在 R 中重新采样 XTS 时间序列?

机器算法验证 r 时间序列 采样 不均匀间隔时间序列
2022-03-13 18:31:09

我有一个不规则间隔的XTS时间序列(POSIXct值作为索引类型)。

我如何构建一个以假设 10 分钟间隔采样的新时间序列,但每个采样时刻都与一个圆形时间对齐(13:00:00、13:10:00、13:20:00,...) . 如果重采样时刻不完全落在原始序列值上,我想采用前一个。

3个回答
library(xts)
?endpoints

例如

tmp=zoo(rnorm(1000), as.POSIXct("2010-02-1")+(1:1000)*60)
tmp[endpoints(tmp, "minutes", 20)]

每 20 分钟进行二次采样。您可能还想查看to.minutes,to.daily等。

我仍然不确定你要做什么,我仍然认为一个例子会有所帮助,但我想我猜你可能对align.time.

# Compare this:
tmp[endpoints(tmp, "minutes", 20)]
# with this:
align.time( tmp[endpoints(tmp, "minutes", 20)], n=60*20 )

如果a是具有第二分辨率条目的 xts 对象,则这会取消所有秒数: index(a)=trunc(index(a),"mins")

您也可以使用它来舍入到“小时”分辨率。但不支持 10 分钟。为此,您必须这样做:

x=as.POSIXlt(index(a))
x$sec[]=0;x$min[]=x$min[]%/%10
index(a)=x

或者a=align.time.down(a,600)你定义的地方:

align.time.down=function(x,n){index(x)=index(x)-n;align.time(x,n)}

(在我自己的脚本中选择了最后一个选项。)