我有一项艰巨的任务要解决。我目前正在处理一个非常高频率的时间序列数据。数据以毫秒/微秒为单位测量。它们的间距并不相等。
注意到
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毫秒中最近的数据点,这是一个很大的循环,效率很低,通常需要很长时间才能运行。
请发布任何建议或好方法,您的好心帮助将不胜感激
如果有现有的软件包,其他语言也会很好。
发布于 2016-03-08 15:07:58
在R中,您可以考虑使用POSIXct类作为时间戳。
在?DateTimeClasses中我们读到
类"POSIXct“表示自1970年开始(在UTC时区)以来的(有符号)秒数,表示为数字向量。
还请注意参数:
用于计算的有效数字的数字数:应该足够高以准确表示最不重要的时间单位。
请注意,有效数字的默认值是15。由于在小数点之前有10位,例如,as.numeric(as.POSIXct(Sys.time())),这将在小数点之后留下5位,或者1e-5秒的精度,这可能不够,所以可能使用digits=18或20等作为缓冲。
为了将观察结果聚合到最近的1e-5秒(10微秒),您可以使用?round.POSIXt,如下所示:
round(x, units = "secs", digits=5)其中x是向量,所以不需要for循环。
https://stackoverflow.com/questions/35861612
复制相似问题