我将创建一些虚拟数据的简单示例:
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)
,如
unique(df1$object[df1$case=='a'])
unique(df1$object[df1$case=='b'])
我使用dpylr
和group_by(case)
答案 0 :(得分:1)
我们可以在分组后使用.GRP
data.table
{&#39; case&#39;和&#39;对象&#39;在data.table对象(setDT(df1)
)上。
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