#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. Спасибо за ваш ответ! Это отличное решение.