gpt4 book ai didi

当 AMT > 0 时重置 TIME 列

转载 作者:行者123 更新时间:2023-12-01 08:54:28 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

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

上述数据框中的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

这基本上是通过在 AMT>0 时从“固定”引用 TIME 中减去 TIME 来实现的(例如;引用时间第二个 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

关于当 AMT > 0 时重置 TIME 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com