私はこのリクエスト機能を回避する方法を見つけようとしています: [#2300]この投稿で言及されたroll=TRUEに後方および最初の後方を追加します。
X
基本的には、以下の「ウィンドウ結合」で見上げて実行したいと思います。Y
- 最初のn列の左結合(次の例では
{x,y}
) - ANDは、tがの最後の列である間隔に該当する最後の列(
t
次の例)の値を選択します。通常は、時間列といくつかの整数(または)になります。Y
[t-w1,t+w2]
X
t
{w1,w2}
w1=w2=something
w1=0
私は次の例を作成しました(ただし、別の/より良い例を自由に提供してください)
library(data.table)
set.seed(123);
X <- data.table(x=c(1,1,1,2,2),y=c(T,T,F,F,F),t=as.POSIXct("08:00:00.000",format="%H:%M:%OS")+sample(0:999,5,TRUE)/1e3)
Y <- copy(X)
set.seed(123)
Y[,`:=`(IDX=.I,t=t+sample(c(-5:5)/1e3,5,T))]
Y <- rbindlist(list(Y, X[5,][,IDX:=6][,t:=t+0.001], X[5,][,IDX:=7][,t:=t+0.002]))
だからと(w1,w2) = (.002,.002)
R) X R) Y
x y t x y t IDX
1: 1 TRUE 2013-01-25 08:00:00.286 1: 1 TRUE 2013-01-25 08:00:00.284 1
2: 1 TRUE 2013-01-25 08:00:00.788 2: 1 TRUE 2013-01-25 08:00:00.791 2
3: 1 FALSE 2013-01-25 08:00:00.407 3: 1 FALSE 2013-01-25 08:00:00.407 3
4: 2 FALSE 2013-01-25 08:00:00.882 4: 2 FALSE 2013-01-25 08:00:00.886 4
5: 2 FALSE 2013-01-25 08:00:00.940 5: 2 FALSE 2013-01-25 08:00:00.945 5
6: 2 FALSE 2013-01-25 08:00:00.941 6 #by hand
7: 2 FALSE 2013-01-25 08:00:00.942 7 #by hand
結果は次のようになります
R) ans
x y t IDX
1: 1 TRUE 2013-01-25 08:00:00.286 1
2: 1 TRUE 2013-01-25 08:00:00.788 NA
3: 1 FALSE 2013-01-25 08:00:00.407 3
4: 2 FALSE 2013-01-25 08:00:00.882 NA
5: 2 FALSE 2013-01-25 08:00:00.940 6,7
ただし、:の複数の行(より多くの行を持つことができる)が一致した場合、1つだけが一致した場合、または一致しなかった場合IDX
は、ここにリストが表示される可能性があります。Y
X
NA
data.table以外の回答にも満足しています...