2013-10-08 43 views
4

這與前面的問題上SO:roll data.table with rollends卷data.table向前和向後同時

鑑於數據...

library(data.table) 

dt1 = data.table(Date=seq(from=as.Date("2013-01-03"), 
         to=as.Date("2013-06-27"), by="1 week"), 
      key="Date")[, ind:=.I] 
dt2 = data.table(Date=seq(from=as.Date("2013-01-01"), 
         to=as.Date("2013-06-30"), by="1 day"), 
      key="Date") 

我嘗試進行每週一次的數據點1天向前和向後 ...

dt1[dt2, roll=1][dt2, roll=-1] 

...但只有第一輥加入(向前)似乎工作和roll=-1被忽略:

  Date ind 
    1: 2013-01-01 NA 
    2: 2013-01-02 NA 
    3: 2013-01-03 1 
    4: 2013-01-04 1 
    5: 2013-01-05 NA 
---    
177: 2013-06-26 NA 
178: 2013-06-27 26 
179: 2013-06-28 26 
180: 2013-06-29 NA 
181: 2013-06-30 NA 

同樣的效果,當我顛倒順序:

dt1[dt2, roll=-1][dt2, roll=1] 

      Date ind 
    1: 2013-01-01 NA 
    2: 2013-01-02 1 
    3: 2013-01-03 1 
    4: 2013-01-04 NA 
    5: 2013-01-05 NA 
---    
177: 2013-06-26 26 
178: 2013-06-27 26 
179: 2013-06-28 NA 
180: 2013-06-29 NA 
181: 2013-06-30 NA 

我想實現:

  Date ind 
    1: 2013-01-01 NA 
    2: 2013-01-02 1 
    3: 2013-01-03 1 
    4: 2013-01-04 1 
    5: 2013-01-05 NA 
---    
177: 2013-06-26 26 
178: 2013-06-27 26 
179: 2013-06-28 26 
180: 2013-06-29 NA 
181: 2013-06-30 NA 

編輯: 我正在使用新的data.table版本1.8.11,注會議細節:

sessionInfo() 

R version 3.0.0 (2013-04-03) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United Kingdom.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] data.table_1.8.11 

loaded via a namespace (and not attached): 
[1] plyr_1.8  reshape2_1.2.2 stringr_0.6.2 tools_3.0.0 

感謝

回答

4

沒有什麼推出後的第一個加入,每排dt2具有相應的行dt1[dt2, roll = .]。因此,只需分別將兩個輥子組合在一起,例如:

dt1[dt2, roll = 1][, ind := ifelse(is.na(ind), dt1[dt2, roll = -1]$ind, ind)] 
+0

謝謝!對於某些[PEBKAC](http://en.wikipedia.org/wiki/User_error)原因,我認爲第二個'roll'連接應該在'NA'值上工作,實際上它工作在'NULL價值觀 –