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)
                 )

Скажем, кредит оценивается в 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) )

Мне нужно выяснить, как выполнять вычисления для всех строк, а не только для первой строки, и создавать фрейм данных. Мне нужно выполнить расчеты амортизации на основе текущего баланса и дней расчета, а также фактического произведенного платежа, а не расчетной суммы платежа. Таким образом, я не могу использовать формулу, чтобы получить эти значения. Я не могу получить правильные значения для InterestAmt или баланса в строках 2-4.

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)

Это не лучший подход, так как он вычисляет начальный баланс и представляет интерес для всех строк, а затем перезаписывает, если ваш набор данных мал, накладных расходов не должно быть много.

Другие вопросы по тегам