4

我有一个时间序列和值的数据框。时间序列是从纪元开始的秒数。这是该数据框中前几个元素的样子

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(+1 第一行中的 ts),它应该返回 1,2(行号)作为输出。基本上,我想找到具有将输入时间戳 1342980889 括起来的时间戳的两行。虽然使用“which”相对容易做到这一点,但我怀疑“which”进行矢量扫描,因为真实的数据帧相当大我想用二进制搜索来做。非常感谢提前

4

1 回答 1

5

您应该使用该findInterval功能。它将为您提供x$ts立即小于您正在查找的值的行的索引(您只需添加一个即可获得另一个索引)

findInterval(1342980889, x$ts)
# [1] 1

另请注意,该函数是矢量化的,即第一个参数可以是要查找的值的向量:

findInterval(c(1342980889, 1342981483), x$ts)
# [1]  1 10
于 2012-07-29T00:45:07.613 回答