2016-04-07 23 views
0

R'de amortisman hesaplaması oluşturmam gerekiyor. İlk satır için hesaplama iyi çalışıyor, ancak sonraki tüm hesaplamalar ya hesaplanan ya da ilk satırdaki değerleri kullanmalı ve iş için döngü olsun. r amortisman çizelgesi oluşturmak için döngü uygulayın

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

kredi 50000 değerindedir ve faiz 0,08 yüzde Say diğer tüm satırlar için ilk satır için

ln_amt = 50000 
ln_interest_rate = .08 

hesaplamalar

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

hesaplamalar

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

Tüm satırlar için hesaplamaları nasıl yapmamız gerektiğini, sadece ilk satırı değil, bir veri çerçevesi oluşturmayı da öğrenmem gerekiyor. Mevcut bakiye ve hesaplama günlerine göre hesaplanan amortisman hesaplamaları ve hesaplanan ödeme değeri değil, yapılan gerçek ödeme. Bu yüzden bu değerleri almak için bir formül kullanamıyorum. İlgilenilen değerler için interestAmt değerini veya satır 2-4 arasındaki dengeyi elde edemiyorum. tüm satırlar için başlangıç ​​denge ve interestamount hesaplamak yapıyor ve sonra yazar olarak

cevap

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) 

, sizin veri kümesi

+0

Ben yaklaşım gibi küçükse havai fazla olmamalı, en iyi yaklaşım değil mi ama ürettiği hesaplamalar doğru değil. Bakiye doğru hesaplanmaz ve bu nedenle interestAmt doğru hesaplamamaktadır. Yaklaşımını kullanmaya çalışacağım ve hesaplamaları doğru yapıp yapamayacağımı göreceğim. Evet haklısın, veri kümeleri küçük. Bunu SAS'ta nasıl yapacağımı biliyorum. Sadece R. Ugh'daki hesaplamaların sırasını anlayamıyorum! –

+0

Bir önceki satırda bulunan _new dengesi veya mevcut bakiye hesaplama değeri ile ne demek istediğinizi açıklayabilseydiniz belki de çözüm daha doğru olabilirdi. Yeniden üretilebilir bir örnek her zaman yardımcı olur –

İlgili konular