如何在 DF 列上进行线性插值,以便用前 11 条记录的 0 和 0.98 以及第 13 到 23 条记录的 0.98 和 0.95 组合获得的“加权量”替换 0,并使用 0.95 作为最后两条记录。这个想法是通过一种插值来获得每月折扣系数。
DT <- data.table(MM=c(1,2,3,4,5,6,7,8,9,10,11,12,12,14,15,16,17,18,19,20,21,22,23,24,25,26),
DF=c(1,0,0,0,0,0,0,0,0,0,0,0.98,0,0,0,0,0,0,0,0,0,0,0.95,0,0,0))
DT
也许是这样的:
DT[, DF2 := approx(MM[DF > 0], DF[DF > 0], xout = MM)$y
][, DF2 := nafill(DF2, type = "locf")]
# MM DF DF2
# <num> <num> <num>
# 1: 1 1.00 1.0000000
# 2: 2 0.00 0.9981818
# 3: 3 0.00 0.9963636
# 4: 4 0.00 0.9945455
# 5: 5 0.00 0.9927273
# 6: 6 0.00 0.9909091
# 7: 7 0.00 0.9890909
# 8: 8 0.00 0.9872727
# 9: 9 0.00 0.9854545
# 10: 10 0.00 0.9836364
# ---
# 17: 17 0.00 0.9663636
# 18: 18 0.00 0.9636364
# 19: 19 0.00 0.9609091
# 20: 20 0.00 0.9581818
# 21: 21 0.00 0.9554545
# 22: 22 0.00 0.9527273
# 23: 23 0.95 0.9500000
# 24: 24 0.00 0.9500000
# 25: 25 0.00 0.9500000
# 26: 26 0.00 0.9500000
步骤:
approx
使用 MM
和 DF
值,其中 DF > 0
,然后返回 all MM
的插值(不管 DF > 0
);nafill
是获取您最后观察到的值 0.95
并将其结转到剩余三行