2015-11-06 30 views
0

我想找到基於另一個表data.table聯接滾滾向前ONCE

library(data.table) 
price = data.table(date = as.IDate(c("2000-01-01", "2000-02-01","2000-03-01","2000-04-01")), close = c(101,102,103,104)) 
meetings = data.table(date = as.IDate(c("2000-01-02", "2000-02-02")), rateDecision=c("rise","keep")) 

price 
#   date close 
# 1: 2000-01-01 101 
# 2: 2000-02-01 102 
# 3: 2000-03-01 103 
# 4: 2000-04-01 104 

meetings 
#   date rateDecision 
# 1: 2000-01-02   rise 
# 2: 2000-02-02   keep 

所需的輸出是速度之後去尋找下一個價格列在一個表中的下一個和唯一的下一個有效點會議。那就是

  date rateDecision close 
1: 2000-01-01   NA 101 
2: 2000-02-01   rise 102 
3: 2000-03-01   keep 103 
4: 2000-04-01   NA 104 

注意行2000-04-01中的NA。滾動連接不起作用。指定roll=30將適用於這種情況,但通常情況下日期間隔不均勻。

meetings[price, on = "date", roll=TRUE] 
#   date rateDecision close 
# 1: 2000-01-01   NA 101 
# 2: 2000-02-01   rise 102 
# 3: 2000-03-01   keep 103 
# 4: 2000-04-01   keep 104 

回答

2

一個解決方法是添加索引列:

ans = meetings[, I := .I][price, on="date", roll=TRUE] 
#   date rateDecision I close 
# 1: 2000-01-01   NA NA 101 
# 2: 2000-02-01   rise 1 102 
# 3: 2000-03-01   keep 2 103 
# 4: 2000-04-01   keep 2 104 

我們現在可以替換NA所有,但首先每個I

ans[ans[, .(idx=.I[-1L]), by=I]$idx, rateDecision := NA][] 
+1

謝謝!這也解決了我的滾動連接的補充問題,但不包括匹配行,即將'.I [-1L]'更改爲'.I [1L]' – jf328