我有两个间隔不均匀的时间序列,每一个度量都将同一系统的属性分开。这两个系列的数据点没有在同一时间取样,而且序列的长度也不相同。我想把从A序列到B行的每一行进行时间上最接近的匹配。我想的是在A中添加一个列,其中包含B中最近行的索引,这两个序列都有一个以Unix时间度量的时间列(例如。1459719755)。
例如,给定两个数据集
a time
2 1459719755
4 1459719772
3 1459719773
b time
45 1459719756
2 1459719763
13 1459719766
22 1459719774第一个数据集应更新为
a time index
2 1459719755 1
4 1459719772 4
3 1459719773 4因为B[1,]$time的值最接近A[1,]$time,所以B[4,]$time的值最接近A[2,]$time和A[3,]$time。
有什么方便的方法吗?
发布于 2016-04-04 19:55:12
试着做这样的事情:
(1+ecdf(bdat$time)(adat$time)*nrow(bdat))
[1] 1 4 4为什么要这么做?ecdf函数返回值为0到1的另一个函数,它返回ecdf第一个参数定义的值分布中新值在“概率范围”0,1中的“位置”。表达式实际上只是将函数的结果重新标度到范围1,nrow(bdat)。(我认为它很优雅。)
另一种方法是对已排序的bdat$time值使用approxfun,然后让您得到插值的值。这些可能需要四舍五入。使用它们作为索引将被截断为整数。
apf <- approxfun( x=sort(bdat$time), y=seq(length( bdat$time)) ,rule=2)
apf( adat$time)
#[1] 1.000 3.750 3.875
round( apf( adat$time))
#[1] 1 4 4在这两种情况下,您都是从其“顺序统计量”中预测排序值。在第二种情况下,你应该检查领带是否以你想要的方式处理。
https://stackoverflow.com/questions/36409961
复制相似问题