R语言处理蛋白质修饰序列 按修饰数重复行拆分单个修饰到每行
R实现蛋白质修饰序列拆分方案
实现思路
- 先用
separate_rows按逗号拆分多修饰列,将一行多修饰自动扩展为N行(N为该行修饰数量) - 逐行匹配修饰序列中的括号标注,仅保留当前行对应修饰的标记,删除其余修饰标注
完整代码
# 加载依赖包 library(tidyverse) # 修正示例输入数据的笔误(原第二行Modified.Sequence标注错误) df = data.frame( Sequence = c('ABCDEF','ABCDEFGH','DEFGH'), Modification = c('Acetyl (Protein N-term),Oxidation (M),Methyl (KR)','Oxidation (M)','Acetyl (Protein N-term), Methyl (KR)'), Modified.Sequence = c('AB(Acetyl (Protein N-term))CD(Oxidation (M))EF(Methyl (KR))','ABCDEF(Oxidation (M))GH', 'ABC(Acetyl (Protein N-term))DEF(Methyl (KR))GH') ) # 拆分处理 df_result <- df %>% # 按逗号拆分修饰列,自动忽略逗号前后的空格 separate_rows(Modification, sep = ",\\s*") %>% rowwise() %>% mutate( Modified.Sequence = str_replace_all(Modified.Sequence, "\\([^()]+\\)", function(match_val) { # 提取括号内的修饰内容对比 inner_mod <- str_sub(match_val, 2, -2) return(ifelse(inner_mod == Modification, match_val, "")) }) ) %>% ungroup() # 查看结果 print(df_result)
适配说明
代码不需要提前枚举修饰类型,可自动适配任意数量、任意名称的修饰拆分需求。
内容的提问来源于stack exchange,提问作者CodingBiology
相关产品推荐
相关产品推荐

