You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何基于数据框另一列生成重复值对应相同ID的新列

R语言按列首次出现顺序生成唯一ID列实现方案

核心逻辑是提取cdr3列的去重值(保留首次出现顺序),给每个去重值分配从1开始的连续编号,拼上X前缀后映射回原数据的每一行,重复值自动复用对应编号。

方法1:基础R实现(无需安装第三方包)

直接用内置函数完成,兼容性最好:

# 构造测试数据(对齐示例输出的cdr3列名)
TCR <- c("CAAETSGSRLTF;CASSQEGTGVYEQYF","CGSRLTF;CASSQEGTGVYEQYF","CAAETSGSRLTF;CASSQEGT", "CAAETSGSRLTF;CASSQEGTGVYEQYF")
df <- data.frame(cdr3 = TCR)

# 生成ID列
df$ID <- paste0("X", match(df$cdr3, unique(df$cdr3)))

运行后输出的df和预期效果完全一致:

> df
                          cdr3 ID
1 CAAETSGSRLTF;CASSQEGTGVYEQYF X1
2      CGSRLTF;CASSQEGTGVYEQYF X2
3         CAAETSGSRLTF;CASSQEGT X3
4 CAAETSGSRLTF;CASSQEGTGVYEQYF X1

方法2:dplyr实现(适配tidyverse工作流)

如果日常使用tidyverse生态处理数据,可以用分组编号的方式实现:

library(dplyr)

# dplyr 1.1.0及以上版本写法
df <- df %>%
  mutate(ID = paste0("X", cur_group_id()), .by = cdr3)

# 低版本dplyr兼容写法
# df <- df %>%
#   group_by(cdr3) %>%
#   mutate(ID = paste0("X", cur_group_id())) %>%
#   ungroup()

说明

  • 两种方法都严格按照cdr3值在数据中首次出现的顺序分配ID,后续重复值直接复用已分配的ID,不会出现编号错乱
  • 如果需要修改ID前缀,直接替换paste0()函数中第一个参数的字符串即可,例如需要前缀为TCR_ID_就改为paste0("TCR_ID_", 序号部分)

内容的提问来源于stack exchange,提问作者Ahmed Hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:51:36