2016-10-13 10 views
2

これは私のdata.tableの外観です。最後の列New_Amountが私の希望する列です。data.tableでの動的および条件付き列の更新

StartingAmount<-10 
library(data.table)  
dt <- fread(' 
       Level Interest New_Amount 
        0  .5  10 
        1  .5  15 
        0  .5  15 
        0  .3  15 
        1  .2  18 
        0  .4  18 
        1  .5  27 
     ') 

私は$ 10で始まると言います。 Level = 1の行ごとに、追加した後に新しい金額を計算したいLevel = 1の2行目のNew_Amountは10+(​​10 * .5)= 15です。 Level = 1の5行目では、New_Amountは15+(15 * .2)= 18です。私はLevel = 0の行を無視して、最後の観測を前方に運びます。

これは私の試みです:

dt[, NewAmount:= ifelse(Level==1,StartingAmount+StartingAmount*Interest,0)] 
    dt[, NewAmount:= ifelse(Level==1, New_Amount + New_Amount*Interest , NA)] 

答えて

2

あなたは余分な関心が以前のものに追加すべきかどうかを判断するためにLevel列に掛けることができInterest列にcumprodを使用することができます。

library(data.table) 
dt[, New_Amount := StartingAmount * cumprod(1 + Level * Interest)][] 

# Level Interest New_Amount 
#1:  0  0.5   10 
#2:  1  0.5   15 
#3:  0  0.5   15 
#4:  0  0.3   15 
#5:  1  0.2   18 
#6:  0  0.4   18 
#7:  1  0.5   27 
+0

あなたの答えをありがとう!その素晴らしい解決策。 – gibbz00

+0

@ gibbz00ようこそ。それが役に立てば幸い! – Psidom

関連する問題