Динамическое и условное обновление столбцов в таблице data.table

#r #data.table #dplyr #zoo

#r #data.table #dplyr #зоопарк

Вопрос:

Вот как выглядит мой data.table. Последний столбец New_Amount — это мой желаемый столбец.

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

Ответ №1:

Вы можете использовать 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
 

Комментарии:

1. Спасибо за ваш ответ! Это отличное решение.