data.table中的动态和条件列更新

时间:2016-10-13 20:56:51

标签: r data.table dplyr zoo

这就是我的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)]

1 个答案:

答案 0 :(得分:2)

您可以在cumprod列上使用InterestLevel列可以与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
}