使用rollapply处理时间窗口 - 不固定的样本窗口用于不规则的时间序列

时间:2014-12-04 07:34:24

标签: r time-series zoo rollapply

我正在尝试计算各个信号的各种统计数据(对于每个样本窗口可能记录或可能不记录的各种信号)。此外,采样间隔不规则 - 可能是2或3或4秒。考虑t是实验的经过秒数,d是测量值:

require('zoo')

t<- c( 0, 1, 2, 4, 5, 6, 9, 10 )
d<- c( 2, 2, 2, 4, 4, 4, 8, 10 )
z<- zoo(d, t)

现在,如您所见,在3秒,7秒或8秒没有测量值。我想在3秒钟的窗口中计算类似最大值的东西。理想情况下,我的输出就像

NA, 2, 2, 4, 4, 4, 8, NA

(我不需要NAs - 只是想让这个例子清楚。) 尝试:

rollapply( z, 3, max)
 1  2  4  5  6  9 
 2  4  4  4  8 10 

不是我想要的!考虑t [3]处的rollapply结果。这应该是2而不是4,因为3s处不存在的度量是在窗口中,但是4s处的现有测量值不是。它&#34;看起来&#34;比如结果只是转移,但你可以玩其他数字,并意识到它是完全错误的。

我是动物园的菜鸟,但在信号处理方面经验丰富。似乎无法让我做到我需要的东西。

提前致谢。

1 个答案:

答案 0 :(得分:1)

使用网格g在遗漏点填写系列,然后使用rollapplyr右对齐窗口(rollapply的默认设置为居中对齐):

library(zoo)

g <- seq(start(z), end(z), 1.0)
zz <- merge(z, zoo(, g))
rollapplyr(zz, 3, max, na.rm = TRUE)

,并提供:

 2  3  4  5  6  7  8  9 10 
 2  2  4  4  4  4  4  8 10