R 在Matlab中聚合/采样超高频时间序列数据?
我有一项艰巨的任务要解决。 我目前正在处理一个非常高频的时间序列数据。数据测量单位为毫秒/微秒。它们的间距不是相等的 注意到 1小时=60分钟=3600秒。 1秒=1000毫秒=1000000微秒 这就是为什么我说我的数据是超高频的。 据我所知,Matlab中的时间序列对象只支持二级数据。我真的需要一些转换我的时间序列,如10毫秒的数据,或100毫秒的数据 这意味着,例如,如果我希望时间序列以10毫秒为单位,那么原始数据只有5毫秒、6毫秒和12毫秒的数据点 我将以6毫秒作为最新的数据点,将其视为10毫秒的数据 有时我需要总结数据间隔,但目前不是很重要 我复制了一些数据,如下所示:R 在Matlab中聚合/采样超高频时间序列数据?,r,matlab,dataframe,time-series,sampling,R,Matlab,Dataframe,Time Series,Sampling,我有一项艰巨的任务要解决。 我目前正在处理一个非常高频的时间序列数据。数据测量单位为毫秒/微秒。它们的间距不是相等的 注意到 1小时=60分钟=3600秒。 1秒=1000毫秒=1000000微秒 这就是为什么我说我的数据是超高频的。 据我所知,Matlab中的时间序列对象只支持二级数据。我真的需要一些转换我的时间序列,如10毫秒的数据,或100毫秒的数据 这意味着,例如,如果我希望时间序列以10毫秒为单位,那么原始数据只有5毫秒、6毫秒和12毫秒的数据点 我将以6毫秒作为最新的数据点,将其视为
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]
时间戳以毫秒和UTC时间测量
我这样做的方式是产生一系列的,比如m=10毫秒,
10,20,30,40
然后我使用大for循环查找每10毫秒最近的数据点,效率非常低,通常需要很长时间运行
请发表任何建议或好的方法,我们将非常感谢您的帮助
<>强>其他语言也会很好,如果有现有的包。
在R中,可以考虑使用<代码> PosixCT/<代码>类来进行时间戳。
在?DateTimeClasses
中,我们读到
类“POSIXct”表示自1970年初以来(UTC时区)的(有符号)秒数,作为数字向量
还要注意参数:
位数计算的有效位数:应足够高,以准确表示最不重要的时间单位
请注意,有效位数的默认值为15。例如,As.numeric(As.POSIXct(Sys.time())
)中的小数点前有10位,这将在小数点后留下5位,或者1e-5
秒精度,这可能不够,因此可能需要使用位=18
或20
等作为缓冲
要将观察值聚合到最接近的1e-5
秒(10微秒),您可以使用?round.POSIXt
,如下所示:
round(x, units = "secs", digits=5)
其中,
x
是一个向量,所以你不需要for循环。Hi,@C8H10N4O2,你在R中提到的非常好,你知道Matlab中类似的函数吗?抱歉@GeekCat,但是没有,从那以后很多年没有使用matlab了school@GeekCat您可以使用Matlab中的posixtime函数来表示使用posix的时间序列。您是否考虑过将数据存储在支持毫秒精度和不规则时间序列数组的时间序列数据库中?@SergeiRodionov我想在Matlab中一站式地完成此操作,谢谢。您推荐了什么数据库?没有针对这个用例的特别推荐,但是维基百科上有一个数据库列表。您可能想检查哪些提供了matlab客户端以简化集成。您能给出一个输入和预期输出的小示例吗?