2016-04-07 11 views
0

Ich muss eine Amortisationsrechnung in R erstellen. Die Berechnung für die erste Zeile funktioniert gut, aber alle nachfolgenden Berechnungen müssen Werte verwenden, die entweder berechnet oder in der ersten Zeile und ich kann nicht Holen Sie sich die Schleife zur Arbeit.r Schleife anwenden, um Amortisationszeitplan zu erstellen

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

Say das Darlehen bei 50000 und der Zinssatz war .08 Prozent

ln_amt = 50000 
ln_interest_rate = .08 

Berechnungen für die erste Reihe geschätzt wird

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

Berechnungen für alle anderen Zeilen

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

Ich muss herausfinden, wie Sie die Berechnungen für alle Zeilen und nicht nur für die erste Zeile ausführen und einen Datenrahmen erstellen. Ich muss die Amortisationsberechnungen basierend auf dem aktuellen Saldo und den Berechnungstagen und der tatsächlich geleisteten Zahlung und nicht mit einem berechneten Zahlungswert durchführen. Daher kann ich keine Formel verwenden, um diese Werte zu erhalten. Ich kann nicht scheinen, die Werte für interestAmt oder Balance in den Zeilen 2-4 zu korrigieren.

Antwort

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

Ist das nicht der beste Ansatz, da es die erste Bilanz und interestamount für alle Zeilen tut berechnen und dann überschreibt, der Overhead nicht viel sein sollte, wenn Ihr Dataset klein ist

+0

ich den Ansatz gefällt, aber die Berechnungen, die es erzeugt, sind nicht korrekt. Der Saldo wird nicht korrekt berechnet und daher wird der interestAmt nicht korrekt berechnet. Ich werde versuchen, Ihren Ansatz zu verwenden und zu sehen, ob ich die Berechnungen richtig machen kann. Ja, Sie haben recht, die Datensätze sind klein. Ich weiß, wie man das in SAS macht. Ich kann einfach die Reihenfolge der Berechnungen in R. Ugh nicht herausfinden! –

+0

Wenn Sie erklärt haben, was Sie mit _new Gleichgewicht in der vorherigen Zeile oder aktuellen Balance-Berechnung Wert_ bedeuten, könnte die Lösung genauer gewesen sein. Ein reproduzierbares Beispiel hilft immer –

Verwandte Themen