2012-07-29 77 views
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.雖然使用「哪個」相對容易,但是我懷疑「哪個」做了矢量掃描,而且真正的數據幀是相當的大我想要使用二進制搜索。非常感謝

回答

5

您應該使用findInterval函數。它會給你在哪裏x$ts立即比你正在尋找的值越小行的索引(你只需要添加一個讓其他指數)

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

還要注意的是功能被矢量,即,第一個參數可以是要查找的值的向量:

findInterval(c(1342980889, 1342981483), x$ts) 
# [1] 1 10 
+0

這很好。搜索是否發生在log(N)時間? – broccoli 2012-07-29 01:04:23

+0

那麼,幫助頁面的詳細信息部分將討論複雜性。 – flodel 2012-07-29 01:15:21

+0

對於要搜索的單個值,是,O(log(N))。更一般地說,如果你的第一個輸入是一個長度爲n的向量,那麼它就是O(n * log(N)),如果這個向量是排序的,那麼它就是O(n)。 – flodel 2012-07-29 11:00:35

相關問題