跨重复值分配唯一标识变量
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)
现在,对于每个唯一的 case
和 object
值,我想创建一个相应的唯一数值(标识符)
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'])
我想过使用 dpylr
和 group_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
我将创建一些虚拟数据的简单示例:
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)
现在,对于每个唯一的 case
和 object
值,我想创建一个相应的唯一数值(标识符)
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'])
我想过使用 dpylr
和 group_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