我想基于另一个表中的列
找到一个表中的下一个和唯一的下一个有效点=
期望的输出是在费率会议后找到下一个价格。那是
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
答案 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][]