【问题标题】:r apply loop to create amortization scheduler 应用循环来创建摊销时间表
【发布时间】:2016-04-07 09:58:49
【问题描述】:

我需要在 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)
                 )

假设贷款价值为 50000,利率为 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 行的 interestAmt 或余额的值。

【问题讨论】:

    标签: r loops apply amortization


    【解决方案1】:
    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)
    

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

    【讨论】:

    • 我喜欢这种方法,但它产生的计算不正确。余额计算不正确,因此 interestAmt 计算不正确。我将尝试使用您的方法,看看我是否可以正确计算。是的,你是对的,数据集很小。我知道如何在 SAS 中执行此操作,我只是无法弄清楚 R. Ugh 中的计算顺序!
    • 如果您能解释在前一行找到的新余额或当前余额计算值是什么意思,那么解决方案可能会更准确。一个可重现的例子总是有帮助的
    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多