首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据行时间戳之间的差异,将表中的每一行匹配为另一表中的行。

根据行时间戳之间的差异,将表中的每一行匹配为另一表中的行。
EN

Stack Overflow用户
提问于 2016-04-04 18:18:04
回答 1查看 46关注 0票数 0

我有两个间隔不均匀的时间序列,每一个度量都将同一系统的属性分开。这两个系列的数据点没有在同一时间取样,而且序列的长度也不相同。我想把从A序列到B行的每一行进行时间上最接近的匹配。我想的是在A中添加一个列,其中包含B中最近行的索引,这两个序列都有一个以Unix时间度量的时间列(例如。1459719755)。

例如,给定两个数据集

代码语言:javascript
运行
复制
a  time
2  1459719755
4  1459719772
3  1459719773

b  time
45 1459719756
2  1459719763
13 1459719766
22 1459719774

第一个数据集应更新为

代码语言:javascript
运行
复制
a  time        index
2  1459719755  1
4  1459719772  4
3  1459719773  4

因为B[1,]$time的值最接近A[1,]$time,所以B[4,]$time的值最接近A[2,]$timeA[3,]$time

有什么方便的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 19:55:12

试着做这样的事情:

代码语言:javascript
运行
复制
(1+ecdf(bdat$time)(adat$time)*nrow(bdat))
[1] 1 4 4

为什么要这么做?ecdf函数返回值为0到1的另一个函数,它返回ecdf第一个参数定义的值分布中新值在“概率范围”0,1中的“位置”。表达式实际上只是将函数的结果重新标度到范围1,nrow(bdat)。(我认为它很优雅。)

另一种方法是对已排序的bdat$time值使用approxfun,然后让您得到插值的值。这些可能需要四舍五入。使用它们作为索引将被截断为整数。

代码语言:javascript
运行
复制
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

在这两种情况下,您都是从其“顺序统计量”中预测排序值。在第二种情况下,你应该检查领带是否以你想要的方式处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36409961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档