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

在R中为重复序列分配唯一标识并关联至原始数据集

问题描述

现有包含Name和Sequence列的数据集,需要为每个唯一Sequence分配A、B、C这类唯一标识,并将标识映射回原始数据集,最终得到包含Name、Sequence、Variable三列的结果(相同序列对应同一标识)。

原始数据集示例:

Name      Sequence
1 KR820422  MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNESGGTSGTQQPQGNTKGVGSP*
2 KR820423  MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*
3 KR820424  MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*
4 KR820425  MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*
5 KR820426  MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*
6 KR820427  MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNKSGGTSGTQQPQGNTEGVGSS*

目标结果示例:

NameSequenceVariable
KR820422对应序列A
KR820423对应序列B
KR820424对应序列B
.........

数据集代码:

df <- data.frame(
  Name = c("KR820422", "KR820423", "KR820424", "KR820425", "KR820426", "KR820427"),
  Sequence = c(
    "MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNESGGTSGTQQPQGNTKGVGSP*",
    "MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*",
    "MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*",
    "MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*",
    "MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*",
    "MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNKSGGTSGTQQPQGNTEGVGSS*"
  ))
解决方案

方法一:Base R 实现

利用factor类型的特性,将唯一序列转换为因子后,把因子水平映射为A、B、C这类字母标识:

# 为Sequence列创建因子,自动生成唯一水平
df$Variable <- factor(df$Sequence)
# 将因子水平替换为大写字母(A、B、C...)
levels(df$Variable) <- LETTERS[1:nlevels(df$Variable)]
# 可选:将Variable转为字符类型(若不需要因子格式)
df$Variable <- as.character(df$Variable)

执行后查看结果:

print(df)

输出示例:

Name                                                                 Sequence Variable
1 KR820422 MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNESGGTSGTQQPQGNTKGVGSP*        A
2 KR820423 MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*        B
3 KR820424 MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*        B
4 KR820425 MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVSLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*        B
5 KR820426 MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNESGGTSGTQQPQGNTEGVGSP*        C
6 KR820427 MAGRSGDSDATLLQAVKIIKILYQSNPYPKPEGTRQARKNRRRRWRARQRQIRAISERILSDCLGRPAEPVPLQLPPIERLNINCNKSGGTSGTQQPQGNTEGVGSS*        D

方法二:dplyr 包实现

如果习惯使用tidyverse工具链,可通过分组操作快速分配标识:
首先安装并加载dplyr:

install.packages("dplyr")
library(dplyr)

然后执行以下代码:

df <- df %>%
  group_by(Sequence) %>%
  mutate(Variable = LETTERS[cur_group_id()]) %>%
  ungroup()

该方法会直接在原始数据集中添加Variable列,相同Sequence对应同一字母标识。


内容的提问来源于stack exchange,提问作者Regan Myers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:35:55