data.table join前滚ONCE

时间:2015-11-06 11:24:48

标签: r data.table

我想基于另一个表中的列

找到一个表中的下一个和唯一的下一个有效点
=

期望的输出是在费率会议后找到下一个价格。那是

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

注意2000-04-01行中的 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 。滚动连接不起作用。指定NA将适用于此情况,但通常不会在日期间隔不均匀时使用。

roll=30

1 个答案:

答案 0 :(得分: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][]