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)
Это не лучший подход, так как он вычисляет начальный баланс и представляет интерес для всех строк, а затем перезаписывает, если ваш набор данных мал, накладных расходов не должно быть много.