gpt4 book ai didi

r - 在包含行的data.table中添加一个倒数列,直到遇到特殊行

转载 作者:行者123 更新时间:2023-12-04 13:19:59 24 4
gpt4 key购买 nike

我有一个标记有序数据的data.table,我想添加一列来告诉我有多少条记录,直到我得到重置倒计时的“特殊”记录为止。

例如:

DT = data.table(idx = c(1,3,3,4,6,7,7,8,9), 
name = c("a", "a", "a", "b", "a", "a", "b", "a", "b"))
setkey(DT, idx)
#manually add the answer
DT[, countdown := c(3,2,1,0,2,1,0,1,0)]


> DT
idx name countdown
1: 1 a 3
2: 3 a 2
3: 3 a 1
4: 4 b 0
5: 6 a 2
6: 7 a 1
7: 7 b 0
8: 8 a 1
9: 9 b 0

看看“倒数计时”列如何告诉我多少行,直到称为“b”的行为止。
问题是如何在代码中创建该列。

请注意,键间距不均匀,并且可能包含重复项(因此在解决问题中不是很有用)。通常,非b名称可以不同,但​​是如果解决方案需要,我可以添加一个哑列,它只是True/False。

最佳答案

这是另一个想法:

## Create groups that end at each occurrence of "b"
DT[, cd:=0L]
DT[name=="b", cd:=1L]
DT[, cd:=rev(cumsum(rev(cd)))]
## Count down within them
DT[, cd:=max(.I) - .I, by=cd]
# idx name cd
# 1: 1 a 3
# 2: 3 a 2
# 3: 3 a 1
# 4: 4 b 0
# 5: 6 a 2
# 6: 7 a 1
# 7: 7 b 0
# 8: 8 a 1
# 9: 9 b 0

关于r - 在包含行的data.table中添加一个倒数列,直到遇到特殊行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231433/

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