【发布时间】:2021-11-27 13:50:12
【问题描述】:
我的data.table dt如下-
dt = structure(list(date = structure(c(18904L, 18904L, 18904L), class = c("IDate",
"Date")), exp_date = structure(c(18915L, 19013L, 19377L), class = c("IDate",
"Date")), days_remaining = c(11, 109, 473), year_remaining = c(0.0301369863013699,
0.298630136986301, 1.2958904109589)), row.names = c(NA, -3L), class = c("data.table",
"data.frame"))
date exp_date days_remaining year_remaining
1: 2021-10-04 2021-10-15 11 0.03013699
2: 2021-10-04 2022-01-21 109 0.29863014
3: 2021-10-04 2023-01-20 473 1.29589041
对于表 dt,我想从利率表中添加一个名为 rates_dt 的费率列
这里是利率数据表rates_dt
rates_dt = structure(list(index = structure(c(18900, 18901, 18904, 18905,
18906), tzone = "UTC", tclass = "Date", class = "Date"), `1_MO` = c(0.07,
0.08, 0.09, 0.1, 0.06), `2_MO` = c(0.05, 0.04, 0.04, 0.04, 0.04
), `3_MO` = c(0.04, 0.04, 0.04, 0.04, 0.04), `6_MO` = c(0.05,
0.05, 0.06, 0.06, 0.06), `1_YR` = c(0.09, 0.09, 0.09, 0.09, 0.1
), `2_YR` = c(0.28, 0.27, 0.27, 0.28, 0.3), `3_YR` = c(0.53,
0.49, 0.52, 0.54, 0.55)), class = c("data.table", "data.frame"
), row.names = c(NA, -5L))
index 1_MO 2_MO 3_MO 6_MO 1_YR 2_YR 3_YR
1: 2021-09-30 0.07 0.05 0.04 0.05 0.09 0.28 0.53
2: 2021-10-01 0.08 0.04 0.04 0.05 0.09 0.27 0.49
3: 2021-10-04 0.09 0.04 0.04 0.06 0.09 0.27 0.52
4: 2021-10-05 0.10 0.04 0.04 0.06 0.09 0.28 0.54
5: 2021-10-06 0.06 0.04 0.04 0.06 0.10 0.30 0.55
我想做的是,如果days_remaining 在dt 表中少于30 天,则添加一个rates 列,在rates_dt 表中查找1_MO 列。同样,如果 days_remaining 为 473(因为超过 365 天),则从 rates_dt 表中的 1_YR 列获取费率。
输出应该是这样的 -
date exp_date days_remaining year_remaining rates
1: 2021-10-04 2021-10-15 11 0.03013699 0.09
2: 2021-10-04 2022-01-21 109 0.29863014 0.04
3: 2021-10-04 2023-01-20 473 1.29589041 0.09
在实际数据中,date 列将包含过去一年的所有日期。所以我正在寻找的解决方案应该使用date分组。
我曾尝试融化rates_dt,然后执行以下操作,但无法达到所需的解决方案-
dt[melted_rates_dt, on = c("date" = "index"), rates := value]
如果有人可以提供有关如何解决此问题的任何指示,我将不胜感激。
谢谢!
【问题讨论】:
-
2_YR的比率都不是 0.09,因此看起来您的预期输出不一致。你能澄清一下吗? -
是
melted_rates_dt只是melt(rates_dt, id.vars = "index")? -
感谢您指出。 473 天的利息为 1_YR 利率,因为此利率适用于 1_YR 至 2_YR。因此 0.09 的利率是正确的。
标签: r data.table