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 (最初の行の ts の +1) を入力として取り、出力として 1,2 (行番号) を返す、ある種の間隔検索関数が必要です。基本的に、入力タイム スタンプ 1342980889 を囲むタイム スタンプを持つ 2 つの行を見つけたいと考えています。これは「which」を使用して比較的簡単に行うことができますが、「which」はベクトル スキャンを実行し、実際のデータ フレームはかなり二分探索を使ってやりたい。よろしくお願いします

4

1 に答える 1

5

関数を使用する必要がありfindIntervalます。x$ts探している値よりもすぐに小さい行のインデックスが得られます(もう1つのインデックスを取得するには、1つ追加するだけです)

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

また、関数がベクトル化されていることにも注意してください。つまり、最初の引数は検索する値のベクトルにすることができます。

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