我想为组添加一个ID列,但是在间隔中具有其他值之后重复该值时,将ID增加1。例如,请考虑以下具有值的列
Unique Value
jack A
jack A
jack A
bill B
bill B
rick C
jack A
jack A
预期结果:
Unique Value ID
jack A 1
jack A 1
jack A 1
bill B 1
bill B 1
rick C 1
jack A 2
jack A 2
我尝试了data.table
包中的以下代码:
DT[, ID := sequence(.N), by = Value]
这仅有助于将ID添加到组中,并且下次发生ID重置为1
。在这里,我想将其增加1
谢谢您的帮助。非常感谢您理解以上示例的任何其他链接。
最终目的是获得一个连接的列,该列将读取类似此jack_a_1
和jack_a_2
的内容,以便该列将用作后续步骤的标识符。
您可以尝试使用shift
中的cumsum
和data.table
来实现:
library(data.table)
dt <- read.table(text = "Value
A
A
A
B
B
C
A
A", header = TRUE)
dt <- data.table(dt)
dt[, change := shift(Value) != Value ]
dt[is.na(change), change := TRUE]
dt[, res := cumsum(change), by = Value]
# Value change res
# 1: A TRUE 1
# 2: A FALSE 1
# 3: A FALSE 1
# 4: B TRUE 1
# 5: B FALSE 1
# 6: C TRUE 1
# 7: A TRUE 2
# 8: A FALSE 2