我有一个时间序列和值的数据框。时间序列是纪元的秒数。以下是该数据框中前几个元素的外观
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
我想要某种间隔搜索功能,它接收时间戳1342980889(第一行中的ts为+1)作为输入,它应该返回1,2(行号)作为输出。基本上,我想找到两行的时间戳,它们包含输入时间标记1342980889.虽然使用“which”相对容易,但我怀疑“哪个”进行矢量扫描,而真正的数据帧是相当的我希望使用二进制搜索来做到这一点。非常感谢提前
答案 0 :(得分:5)
您应该使用findInterval
功能。它将为您提供x$ts
立即小于您要查找的值的行的索引(您只需添加一个以获取另一个索引)
findInterval(1342980889, x$ts)
# [1] 1
另请注意,该函数是矢量化的,即第一个参数可以是要查找的值的向量:
findInterval(c(1342980889, 1342981483), x$ts)
# [1] 1 10