1

ウィンドウの結合について尋ねる多くの投稿に出くわしました

  1. ローリング中央値
  2. ローリング回帰

data.table1.8.8rollパラメーターなので、これらのことを行うことができると理解しています。がXありY、同じキーx,y,tで、の各行を取得できるようにしたいとします。X

Ywhere x,yofのすべての行がAND whereの行とY一致しているXX$t in [Y$t-w1,Y$t+w2]

ここに例があります(w1,w2)=(1,5)

library(data.table)
A <- data.table(x=c(1,1,1,2,2),y=c(F,F,T,T,T),t=c(407,286,788,882,942),key='x,y,t')
X <- copy(A)
Y <- data.table(x=c(1,1,1,2,2,2,2),y=c(F,F,T,T,T,T,T),u=c(417,285,788,882,941,942,945),IDX=1:7,key='x,y,u')

R) X
   x     y   t
1: 1 FALSE 286
2: 1 FALSE 407
3: 1  TRUE 788
4: 2  TRUE 882
5: 2  TRUE 942
R) Y
   x     y   u IDX
1: 1 FALSE 285   2 # match line 1 as (x,y) ok and 285 in [286-1,286+5]
2: 1 FALSE 417   1 # match no line as (x,y) ok against X[c(1,2),] but 417 is too big
3: 1  TRUE 788   3 # match row 3
4: 2  TRUE 882   4 # match row 4
5: 2  TRUE 941   5 # match row 5
6: 2  TRUE 942   6 # match row 5
7: 2  TRUE 945   7 # match row 5

Y[setkey(X[,list(x,y,t)],x,y,t),roll=1](x,y,t) に完全に一致する場合、data.table は との潜在的な部分一致を破棄するため、これはできませんX$t in [Y$t-w1,X$t[

#get the lower bounds and upper bounds for t
X[,`:=`(lowT=t-1,upT=t+5)]
#we get the first line where Y$u >= X$t-1 but Y$u <= X$t+5
X <- setnames(copy(Y),c('u','IDX'),c('lowT','lowIDX'))[setkey(X,x,y,lowT),roll=-6,rollends=T]
#we get the last line where Y$u <= X$t+5 ...
X <- setnames(copy(Y),c('u','IDX'),c('upT','upIDX'))[setkey(X,x,y,upT),roll=6]
#we get the matching IDX
X[!is.na(lowIDX) & !is.na(upIDX), allIDX:=mapply(`seq`,from=lowIDX,to=upIDX)]

R) X
   x     y upT upIDX lowT lowIDX   t allIDX
1: 1 FALSE 291     2  285      2 286      2
2: 1 FALSE 412    NA  406     NA 407       
3: 1  TRUE 793     3  787      3 788      3
4: 2  TRUE 887     4  881      4 882      4
5: 2  TRUE 947     7  941      5 942  5,6,7

私の質問は次のとおりです。

  1. ウィンドウの結合は以前は簡単に実現できなかったと考えてrollよろしいですか?
  2. 必要に応じて pb を解くことはできますかX$t in ]Y$t-w1,Y$t+w2[(コンパクト セットではありません)。
4

0 に答える 0