如何为列中的每组相同值分配唯一的ID号

我有一个数据框的列数。 我想创build一个名为“id”的新列,它给“sample”列中的每组相同的值赋予一个唯一的id号。

示例数据:

# dput(df) df <- structure(list(index = 1:30, val = c(14L, 22L, 1L, 25L, 3L, 34L, 35L, 36L, 24L, 35L, 33L, 31L, 30L, 30L, 29L, 28L, 26L, 12L, 41L, 36L, 32L, 37L, 56L, 34L, 23L, 24L, 28L, 22L, 10L, 19L), sample = c(5L, 6L, 6L, 7L, 7L, 7L, 8L, 9L, 10L, 11L, 11L, 12L, 13L, 14L, 14L, 15L, 15L, 15L, 16L, 17L, 18L, 18L, 19L, 19L, 19L, 20L, 21L, 22L, 23L, 23L)), .Names = c("index", "val", "sample"), class = "data.frame", row.names = c(NA, -30L)) head(df) index val sample 1 1 14 5 2 2 22 6 3 3 1 6 4 4 25 7 5 5 3 7 6 6 34 7 

我想结束:

  index val sample id 1 1 14 5 1 2 2 22 6 2 3 3 1 6 2 4 4 25 7 3 5 5 3 7 3 6 6 34 7 3 

我遇到了麻烦,因为任何意见将不胜感激。

谢谢!

怎么样

 df2 <- transform(df,id=as.numeric(factor(sample))) 

我认为这个(从创build一个唯一的ID ),应该稍微更有效率,虽然也许有点难记:

 df3 <- transform(df, id=match(sample, unique(sample))) all.equal(df2,df3) ## TRUE 

这是一个data.table解决scheme

 library(data.table) setDT(df)[, id := .GRP, by = sample]