我有一个时间序列和值的数据框.时间序列是纪元的秒数.以下是该数据框中前几个元素的外观
val = seq(1,19)
ts = seq(1342980888,1342982000,by=60)
x = data.frame(ts = ts,val = val)
head(x)
ts val
1 1342980888 1
2 1342980948 2
3 1342981008 3
4 1342981068 4
5 1342981128 5
6 1342981188 6
Run Code Online (Sandbox Code Playgroud)
我想某种间隔搜索功能,它接收时间戳1342980889(第一行中的ts为+1)作为输入,它应该返回1,2(行号)作为输出.基本上,我想找到具有括起输入时间戳1342980889.时间标记的两行虽然这是比较容易使用"的",我怀疑"其中"做了矢量扫描和真实数据帧是相当办我希望使用二进制搜索来做到这一点.非常感谢提前
你应该使用这个findInterval功能.它将为您提供行的索引,该行的位置x$ts立即小于您要查找的值(并且您只需添加一个来获取另一个索引)
findInterval(1342980889, x$ts)
# [1] 1
Run Code Online (Sandbox Code Playgroud)
另请注意,该函数是矢量化的,即第一个参数可以是要查找的值的向量:
findInterval(c(1342980889, 1342981483), x$ts)
# [1] 1 10
Run Code Online (Sandbox Code Playgroud)