这就是我的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。在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)]
答案 0 :(得分: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
列相乘,以确定是否应将额外的兴趣添加到上一个列中:
$scope.event = [];
socket.on('Consumer', function(data) {
var obj = {
file: $scope.filename,
data: data
}
safelyAdd({
id: $scope.event.length,
value: data
});
});
var limit = 500;
function safelyAdd(element){
($scope.event.length >= limit) && $scope.event.length = 0; //reset array if max size reached
$scope.event.push(element); //then push
}