如何为数据框df的肽段组匹配names向量中的对应名称?
解决方法
我们可以通过创建肽段组标识,再将其与names向量匹配的方式,快速为数据框添加Name列。
步骤说明
- 按
MHC分组,在每组内用Pos == "1"的位置标记新肽段组的起始,生成分组ID; - 利用分组ID作为索引,直接从
names向量中提取对应名称,赋值给新的Name列。
代码实现
方法一:Base R 实现
# 为每个MHC组内的肽段生成分组ID df$pep_group <- with(df, ave(Pos, MHC, FUN = function(x) cumsum(x == "1"))) # 根据分组ID匹配对应的肽段名称 df$Name <- names[as.integer(df$pep_group)] # 可选:删除临时的pep_group列 df <- df[, !names(df) %in% "pep_group"]
方法二:dplyr 实现(管道式操作更直观)
library(dplyr) df_with_name <- df %>% # 按MHC分组处理 group_by(MHC) %>% # 生成每个MHC内的肽段组ID mutate(pep_group = cumsum(Pos == "1")) %>% # 取消分组 ungroup() %>% # 匹配对应的肽段名称 mutate(Name = names[pep_group]) %>% # 可选:移除临时分组列 select(-pep_group)
结果说明
处理后的数据框会新增Name列,每个肽段组(即Pos从1开始的连续行)会对应names向量中的一个名称:
- 所有
Pos起始为1的肽段组(如HLA-A02:01的第1-5行、HLA-B35:01的第19-23行)对应COL7A1_Pro268Ser; - 第二个肽段组对应
COL7A1_Arg1120Lys; - 第三个肽段组对应
CYP2D6_Val7Met。
内容的提问来源于stack exchange,提问作者Douglas
相关产品推荐
相关产品推荐

