時間のキー値が近いが、まったく同じではないRでデータテーブルを結合する巧妙な方法はありますか? たとえば、さまざまな期間で得られた結果のデータ テーブルがあるとします。
DT1 = data.table(x=rep(c("a","b","c"),each=3), time=c(10,30,60), v=1:9)
ここでは、さまざまな時間 (時間) に取得されたさまざまなカテゴリ (x) のいくつかの値 (v) があります。ここで、さまざまなカテゴリの時間値を提供する別のソースからのデータがあるとします。
DT2=data.table(x=rep(c("a","b","c"),each=1),time=c(10,10,60))
DT2 カテゴリの値 v を予測するために、DT2 の時間をできるだけ DT1 に一致させたいと思うかもしれません。私は次のようなことをしたいと思います
setkeyv(DT2,c("x","time"))
merge(DT1,DT2,by=c("time","v")
どちらが返されますか:
time x v
1: 10 a 1
2: 10 b 4
3: 60 c 9
しかし、私の時間が同じ精度を持っていなかったらどうなるでしょうか? 例えば:
DT2=data.table(x=rep(c("a","b","c"),each=1),time=c(17,54,3))
同様のマージを実行して、DT1 の時間に近い DT2 の時間を選択する方法はありますか? つまり、17 は 30 に近く、54 は 60 に近く、3 は 10 に近いということですか?
この単純な例が明確でない場合は、私が抱えているより大きな問題について簡単に説明します。列を持つデータ テーブルがあります: カテゴリ、時間、出力 1、出力 2... 関連する時間を持つ何百ものカテゴリがあります。特定の時間にすべてのカテゴリの出力 1 をプルしたい場合があります。時間は明らかなロジックなしでサンプリングされたため、時間は最も近い偶数秒に丸められることがあります。それ以外の場合、時間は最も近い分または 10 分に丸められます。
もっと一般的な形式で時間を書き直すスクリプトを書くこともできますが、見たことのない洗練された data.table ソリューションがあるかどうかに興味があります。ローリングマージを調査しましたが、成功しませんでした。