如何在R语言中基于多列分组为新列分配数值ID
为多列唯一组合分配唯一ID的解决方案
数据示例
先看前后的转换效果:
原数据
# 模拟从CSV加载的数据 df <- tibble( Cancer = c("TA", "TA", "TB", "TA"), Lymph = c("N0", "N0", "N1", "N0"), Immunotherapy = c(1, 2, 1, 1) )
输出样式:
| Cancer | Lymph | Immunotherapy |
|---|---|---|
| TA | N0 | 1 |
| TA | N0 | 2 |
| TB | N1 | 1 |
| TA | N0 | 1 |
处理后的数据
| Cancer | Lymph | Immunotherapy | ID |
|---|---|---|---|
| TA | N0 | 1 | 1 |
| TA | N0 | 2 | 2 |
| TB | N1 | 1 | 3 |
| TA | N0 | 1 | 1 |
两种dplyr实现方法
方法1:分组后用cur_group_id()
这是最贴合dplyr workflow的方式,按目标列分组后,cur_group_id()会自动为每个唯一组合分配递增的ID:
library(dplyr) # 加载CSV数据 df <- read.csv("your_file.csv") # 添加ID列 df_with_id <- df %>% group_by(Cancer, Lymph, Immunotherapy) %>% mutate(ID = cur_group_id()) %>% ungroup() # 记得取消分组,避免后续操作干扰
方法2:因子转换法
如果不想分组,可以把三列的组合拼接成字符串,转成因子后再转成整数,同样能得到唯一ID:
df_with_id <- df %>% mutate(ID = as.integer(factor(paste(Cancer, Lymph, Immunotherapy))))
你之前失败的可能原因
如果之前用group_by() + mutate()没成功,大概率是用错了函数——比如误用row_number()(会生成组内的行号,不是组的唯一ID),而不是cur_group_id()。
内容的提问来源于stack exchange,提问作者matthew moldovan
相关产品推荐
相关产品推荐

