2016-10-13 6 views
2

Это то, на что похоже моя таблица данных. Последний столбец 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, мой New_Amount равен 10+ (10 * .5) = 15. В 5-й строке, где Level = 1, мой 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

Вы можете использовать cumprod на Interest колонку, вы можете умножить с Level столбца, чтобы определить, если дополнительные проценты должны быть добавлены к предыдущей:

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