2014-10-08 29 views
2

讓我們兩個不重疊data.tables並做滾動加盟:卷加盟的兩個非重疊`data.table`s

library(data.table) 
P = data.table(id=c("a","a"), t=c(1,4), txn=c(0, 0),key=c("id", "t")) 
TX = data.table(id=c("a"), t=c(3), txn=c(1111),key=c("id", "t")) # note the index t = 3 falling in the gap of P 
P[TX, txn:=i.txn, roll=TRUE] 
P 
# id t txn 
# 1: a 1 1111 
# 2: a 4 0 

爲什麼txn滾落到以前可用指數( t=1),當用roll>0我會期望它被滾動到下一個可用一個(t=4)?

P # expected 
# id t txn 
# 1: a 1 0 
# 2: a 4 1111 
+0

你想要得到什麼行爲?或者你對此感到滿意,只是問爲什麼會發生? – smci 2014-10-08 19:26:55

+1

@smci,他在帖子的底部顯示了預期的輸出。 – Arun 2014-10-08 19:30:54

+0

@阿倫:我已經讀過他寫的東西了。他沒有說他是否真的想**,或者只是因爲好奇而問。他沒有說他想要什麼。 – smci 2014-10-09 01:11:25

回答

3

?data.table(下roll參數):

如果roll=TRUEi的行匹配所有,但最後x聯接列,其價值在過去i聯接列落在差距(包括在x最後一次觀察該組後),那麼x中的主要值將前滾。

在此,值t = 3,從TX(= i)選自P落入的間隙中,T = 1和t = 4之間。因此,匹配是現行值P(= x)是t = 1,並且對應的行是第一行。您可以通過它找出來:

P[TX, which=TRUE, roll=Inf] ## same as roll=TRUE, LOCF 
# [1] 1 

相反,如果我們這樣做:

P[TX, which=TRUE, roll=-Inf] ## NOCB 
# [1] 2 

這是否回答你的問題?

+0

謝謝,它會返回我需要的結果:'P [TX,txn:= i.txn,roll = -Inf]'我嘗試了很多組合,但'roll = -Inf'感覺有點反 - 直觀;因爲它是'TX'向上或向下滾動'P'索引網格以找到最近的非間隙位置,_positive_ sign in'roll'會在移動時向網格提示;恰恰相反的行爲就是這種情況 – 2014-10-08 20:16:27

+0

如果你不經過在''data.table' ;-)'roll'下給出的解釋,它可能會違反直覺。 – Arun 2014-10-08 20:22:18