Rstudio 数据表每月折扣因子插值

问题描述 投票:0回答:1

如何在 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
data.table finance discount
1个回答
0
投票

也许是这样的:

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
    并将其结转到剩余三行
© www.soinside.com 2019 - 2024. All rights reserved.