为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

慕粉4167745 2019-08-13 14:16:25

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

我有一个包含多个列的数据框。我想创建一个名为“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


查看完整描述

2 回答

?
幕布斯5086720

怎么样

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

我认为这(从创建一个唯一的身份证)应该稍微提高效率,尽管可能有点难以记住:

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


查看完整回答
反对 回复 2019-08-13
?
慕圣8478803

这是一个data.table解决方案

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


查看完整回答
反对 回复 2019-08-13
  • 2 回答
  • 0 关注
  • 85 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信