r应用循环创建摊销计划



我需要在R中创建一个摊销计算。第一行的计算很好,但所有后续计算都需要使用已计算或第一行中的值,我无法使循环工作。

df <- data.frame(
  LoanID = c("LN-000249", "LN-000249", "LN-000249", "LN-000249"),
  apply_date = c("2015-07-30 UTC", "2015-09-03 UTC", "2015-11-09 UTC", "2015-11-18 UTC"),
  pmt_amt = c(17292.45, 17153.90, 18100.00,   107.23),
  rows = c(1, 2, 3, 4),
  calc_days = c(41, 35, 67,  9)
                 )

假设贷款价值5万英镑,利率为0.08%

ln_amt = 50000
ln_interest_rate = .08

第一行的计算

df$interestAmt <- ln_amt * ln_interest_rate / 360 * df$calc_days
df$principalAmt <- df$pmt_amt - df$interestAmt
df$balance <- ln_amt - df$principalAmt

所有其他行的计算

df$interestAmt <- (new balance found in previous row or current balance calculation value) * ln_interest_rate / 360 * df$calc_days
df$principalAmt <- df$pmt_amt - df$interestAmt
df$balance <- (new balance found in previous row ) - df$principalAmt
 # or it is equal to the (ln_amt - cumsum(df$principalAmt) )

我需要弄清楚如何对所有行(而不仅仅是第一行)进行计算,并创建一个数据帧。我需要根据当前余额和计算天数以及实际付款进行摊销计算,而不是计算付款价值。因此,我无法使用公式来获得这些值。我似乎无法得到第2-4行利息金额或余额的正确值。

df2<-df %>% mutate(interestAmt <- ln_amt * ln_interest_rate/360*calc_days,
principalAmt = pmt_amt - interestAmt,
balance  = ln_amt - principalAmt) %>% mutate(interestAmt =(ifelse(is.na(lag(balance,1)),balance,lag(balance,1))) * ln_interest_rate/360*calc_days,
principalAmt = pmt_amt - interestAmt,
balance = lag(balance,1) - principalAmt)

这不是最好的方法,因为它确实计算了所有行的初始余额和利息金额,然后覆盖,如果数据集的很小,开销应该不会很大

最新更新