我有一个如下所示的数据框:
ID TIME AMT
1 0 50
1 1 0
1 2 0
1 3 0
1 4 0
1 4 50
1 5 0
1 7 0
1 9 0
1 10 0
1 10 50
Run Code Online (Sandbox Code Playgroud)
TIME上述数据框中的列是连续的.我想添加另一个时间列,将时间从零重置为AMT>0.所以,我的输出数据框应如下所示:
ID TIME AMT TIME2
1 0 50 0
1 1 0 1
1 2 0 2
1 3 0 3
1 4 0 4
1 4 50 0
1 5 0 1
1 7 0 3
1 9 0 5
1 10 0 6
1 10 50 0
Run Code Online (Sandbox Code Playgroud)
这基本上是通过减去实现TIME从"固定的"基准TIME 时AMT>0(例如,对于第二参考时间AMT>0是4.因此,TIME2计算通过减去5-4=1; 7-4=3; 9-4=5等等如何可以在R.自动执行此
一个data.table解决方案:
library(data.table)
setDT(DT)[,TIME2 := TIME-TIME[1],cumsum(AMT>0)]
# ID TIME AMT TIME2
# 1: 1 0 50 0
# 2: 1 1 0 1
# 3: 1 2 0 2
# 4: 1 3 0 3
# 5: 1 4 0 4
# 6: 1 4 50 0
# 7: 1 5 0 1
# 8: 1 7 0 3
# 9: 1 9 0 5
# 10: 1 10 0 6
# 11: 1 10 50 0
Run Code Online (Sandbox Code Playgroud)