如何标记相同值的序列

问题描述 投票:0回答:1

我想为组添加一个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_1jack_a_2的内容,以便该列将用作后续步骤的标识符。

r dplyr id
1个回答
2
投票

您可以尝试使用shift中的cumsumdata.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
© www.soinside.com 2019 - 2024. All rights reserved.