我有两个数据:
cash_flows
coupon_date
1 2026-07-31
2 2026-01-31
3 2025-07-31
4 2025-01-31
5 2024-07-31
6 2024-01-31
discount_rates
date df
1 2023-07-25 0.9806698
2 2024-07-25 0.9737091
3 2025-07-25 0.9432057
4 2026-07-27 0.9109546
5 2027-07-26 0.8780984 我想在cash flows中创建一个新列,其中包含discount rates中的dr列的线性插值值。
因此,期望的产出是:
cash_flows
coupon_dates new_column
1 2026-07-31 0.910594
2 2026-01-31 0.926509
3 2025-07-31 0.942678
4 2025-01-31 0.957831
5 2024-07-31 0.973208
6 2024-01-31 0.977056我已经下载了forecast包,但仍然不完全确定如何实现这一目标。任何帮助都是非常感谢的。
复制数据文件的代码:
cash_flows <- data.frame(coupon_date = as.Date(c("2026-07-31","2026-01-31","2025-07-31", "2024-07-31","2024-01-31")))
drdr <- data.frame(date = as.Date(c("2023-07-25","2024-07-25","2025-07-25", "2026-07-27","2027-07-26")), df = c(0.9806698, 0.9737091, 0.9432057, 0.9109546, 0.8780984))发布于 2022-07-21 01:27:46
?approx可用于线性插值。
从x数据中传递源drdr和y变量,并指定要根据cash_flows$coupon_date x值(xout=)知道插值的输出y值:
cash_flows$new_column <- approx(x=drdr$date, y=drdr$df, xout=cash_flows$coupon_date)$y
cash_flows
# coupon_date new_column
#1 2026-07-31 0.9105935
#2 2026-01-31 0.9265089
#3 2025-07-31 0.9426784
#4 2024-07-31 0.9732077
#5 2024-01-31 0.9770563与您的预期输出完全匹配( cash_flows中的一行除外,它不在您的代码中以复制data.frames,而是在问题的前面显示)。
发布于 2022-07-21 01:25:45
这是一个选择。我们将线性模型df ~ date与drdr进行拟合。然后使用predict来估计cash_flows中日期的df。请注意,这些数字并不完全符合您的预期输入。
fit <- lm(df ~ date, data = drdr)
cash_flows %>%
mutate(new_column = predict(fit, newdata = data.frame(date = coupon_date)))
# coupon_date new_column
#1 2026-07-31 0.9101729
#2 2026-01-31 0.9234352
#3 2025-07-31 0.9369172
#4 2024-07-31 0.9636614
#5 2024-01-31 0.9769969https://stackoverflow.com/questions/73059589
复制相似问题