R - 动态使用上一行值

时间:2016-11-01 10:51:44

标签: r data.table

我对R很新,我在最近几周遵循了很多教程来改进自己。

我正在尝试用R来实现我不能确定的东西。我想从数据集中使用来自不同行的该数据集的值来计算新值。

我有一个像这样的简单输入表:

   InVal Result
1:     0      0
2:   100      0
3:    10      0
4:    -5      0
5:    10      0

我想为每一行计算InVal的总和,如果它是正数,则重新使用InVal的先前结果。

为此我创建了一个新的col并用0初始化它并为initData添加一个0行:

DT[ , Result := InVal + shift(Result, 1L, type="lag")]

然后我试着这样做,期待它能完成这项工作:

   InVal Result
1:     0     NA
2:   100    100
3:    10     10
4:    -5     -5
5:    10     10

但我得到了这个:

ID | drug
-----------
1  | drug1
1  | drug2
1  | drug3
2  | drug3
2  | drug5
3  | drug1
3  | drug3
3  | drug4
3  | drug5

似乎R i使用0作为所有行的结果而不是之前计算该行的实际结果。我以为R是按顺序执行的?!

你知道我怎样才能达到我的目标? 谢谢:))

1 个答案:

答案 0 :(得分:2)

我的理解是你想要一个系列的累积和,但想要复制上一行的总和,其中值小于零。这可以通过将所有-ve值替换为0然后找到cumsum来完成。

require(data.table)

dt=data.table(Inval=c(100,10,-5,10))
dt

dt[,Result:= Inval]
dt
dt[Result<0, Result:=0 ]
dt

dt[, Result:=cumsum(Result)]
dt