对不规则时间序列的定期分析 [英] Regular analysis over irregular time series

查看:33
本文介绍了对不规则时间序列的定期分析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个不规则的时间序列(R 中的xts),我想对其应用一些时间窗口.例如,给定如下所示的时间序列,我想计算从 2009-09-22 00:00:00 开始的每个离散 3 小时窗口中有多少观测值:

I have an irregular time series (xts in R) that I want to apply some time-windowing to. For example, given a time series like the following, I want to compute things like how many observations there are in each discrete 3-hour window, starting from 2009-09-22 00:00:00:

library(lubridate)
s <- xts(c("OK", "Fail", "Service", "OK", "Service", "OK"),
         ymd_hms(c("2009-09-22 07:43:30", "2009-10-01 03:50:30",
                   "2009-10-01 08:45:00", "2009-10-01 09:48:15",
                   "2009-11-11 10:30:30", "2009-11-11 11:12:45")))

我显然不能使用 period.apply()split() 来做这件事,因为那些会省略没有观察的句点,我不能给它一个开始时间.

I apparently can't use period.apply() or split() to do it, because those will omit periods with no observations, and I can't give it a starting time.

如果我一次汇总 3 天,我想要的简单计数问题的输出(当然,我的实际任务对于每个部分都更加复杂!)将是这样的:

My desired output for the simple counting problem (though, of course, my real tasks are more complicated with each segment!) would be something like this if I aggregated 3 days at a time:

2009-09-22    1
2009-09-25    0
2009-09-28    0
2009-10-01    3
2009-10-04    0
2009-10-07    0
2009-10-10    0
2009-10-13    0
2009-10-16    0
2009-10-19    0
2009-10-22    0
2009-10-25    0
2009-10-28    0
2009-10-31    0
2009-11-03    0
2009-11-06    0
2009-11-09    2

感谢您的指导.

推荐答案

使用 align.times 的索引放入您感兴趣的句点.然后使用 period.apply 找到每个 3 小时窗口的长度.然后将它与一个包含所有你想要的索引值的空 xts 对象合并.

Use align.time to put the index of s into the periods you're interested in. Then use period.apply to find the length of each 3-hour window. Then merge it with an empty xts object that has all the index values you want.

# align index into 3-hour blocks
a <- align.time(s, n=60*60*3)
# find the number of obs in each block
count <- period.apply(a, endpoints(a, "hours", 3), length)
# create an empty xts object with the desired index
e <- xts(,seq(start(a),end(a),by="3 hours"))
# merge the counts with the empty object and fill with zeros
out <- merge(e,count,fill=0)

这篇关于对不规则时间序列的定期分析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆