跨重复值分配唯一标识变量

Assigning an unique identification variable across repeated values

我将创建一些虚拟数据的简单示例:

case <- c('a','a','a','b','b','c','c','c','c','d','d','e','e')
object <- c(1,1,2,1,1,1,1,2,3,1,1,1,2)

df1 <- data.frame(case, object)

现在,对于每个唯一的 caseobject 值,我想创建一个相应的唯一数值(标识符)

df1$UNIQ_ID <- ........

最终结果应采用以下值 c(1,1,2,3,3,4,4,5,6,7,7,8,9) 与 when

unique(df1$object[df1$case=='a'])
unique(df1$object[df1$case=='b'])

我想过使用 dpylrgroup_by(case)

在 data.table 对象 (setDT(df1)) 上按 'case' 和 'object' 分组后,我们可以使用 data.table 中的 .GRP

library(data.table)
setDT(df1)[,UNIQ_ID:= .GRP ,.(case, object)]
df1
#     case object UNIQ_ID
# 1:    a      1       1
# 2:    a      1       1
# 3:    a      2       2
# 4:    b      1       3
# 5:    b      1       3
# 6:    c      1       4
# 7:    c      1       4
# 8:    c      2       5
# 9:    c      3       6
#10:    d      1       7
#11:    d      1       7
#12:    e      1       8
#13:    e      2       9

一个base R选项是

grp <- interaction(df1)
as.numeric(factor(grp, levels= unique(grp)))
#[1] 1 1 2 3 3 4 4 5 6 7 7 8 9