在Matlab中聚合/采样超高频时间序列数据?

时间:2016-03-08 07:38:07

标签: r matlab dataframe time-series sampling

我有一项艰巨的任务需要解决。 我目前正在使用非常高频率的时间序列数据。数据以毫秒/微秒测量。他们的间隔不一样。

注意到

1小时= 60分钟= 3600秒。

1秒= 1,000毫秒= 1,000,000微秒

这就是为什么我说我的数据是 超高频率 。 据我所知,Matlab中的时间序列对象仅支持二级数据。我真的需要转换我的时间序列,例如10毫秒数据或100毫秒数据。

这意味着,例如,如果我希望我的时间序列在10毫秒内,原始数据只有5毫秒,6毫秒和12毫秒的数据点。

我将6毫秒作为最新的数据点,将其视为10毫秒的数据。

有时我需要总结数据间隔,但目前不是很重要。

我会重现一些数据,如下所示:

TimeStamp=  
[66846720;67567616;67567617;67567618;67567619;67567620;67567621;67633152;...   
67633153;67633154;67633155;67633156;67633157;67633158;67633159;67633160;...   
67633161;67633162;482410496;495583232;495583233;807206912;1422721024;...
1596325888;1766457344];
Value = [2094.75;2094.75;2094.75;2094.75;...
2094.75;2094.75;2094.75;2094.75;2094.75;...
2094.75 ;2094.75 ;2094.75;2094.75;2094.75;...
2094.75 ;2094.75 ;2094.75;2094.75;2094.5;...
2094.75 ;2094.75 ;2094.5  ;2094.5 ;2094.75;2094.5]

TimeStamp 以毫秒为单位,以及 UTC时间

我这样做的方法是生成一系列说m = 10毫秒, 10,20,30,40 .....

然后我使用一个大循环找到每10毫秒最近的数据点,效率非常低,通常需要很长时间才能运行......

请发布任何建议或好方法,我们将非常感谢您的帮助

如果有现有的软件包,其他语言也会很好。

1 个答案:

答案 0 :(得分:1)

在R中,您可以考虑使用POSIXct类作为时间戳。

?DateTimeClasses我们读到了

  

类“POSIXct”表示自1970年初(在UTC时区)以来作为数字向量的(带符号)秒数。

还要注意参数:

  

数字计算的有效位数:应足够高,以准确表示最不重要的时间单位。

请注意,重要位的默认值为15.因为小数点前面有10位数,例如as.numeric(as.POSIXct(Sys.time())),所以在小数点后面会留下5位数点,或1e-5秒精度,这可能是不够的,所以也许可以使用digits=1820等来缓冲。

要将观察结果汇总到最近的1e-5秒(10微秒),您可以使用?round.POSIXt,如下所示:

round(x, units = "secs", digits=5)

其中x是向量,因此您不需要for循环。