如何在R中解析字符串并复制特定模式的登录号
R语言实现字符串登录号的批量插入
需求说明
需要将字符串开头的登录号(如Q8R149)复制到];之后、dxPhospho(d为任意数字)之前,匹配]; dPhospho的模式完成插入。
示例数据
# 示例数据框 DT <- data.frame(Positions.in.Master.Proteins = c( "Q8R149 2xPhospho [T131(100); T/S]; 2xPhospho [T157(100); T/S]", "Q9UET0 3xPhospho [S23(90); T63(70); Y67(70)]; 3xPhospho]" ))
解决方案
方法1:使用base R(无需额外包)
先提取每个字符串开头的登录号,再通过mapply结合gsub批量替换目标模式:
# 提取每个字符串的开头登录号 accessions <- sapply(strsplit(DT$Positions.in.Master.Proteins, " "), `[`, 1) # 批量替换目标位置 DT$Positions.in.Master.Proteins <- mapply(function(str, acc) { gsub("; (\\d+xPhospho)", paste0("; ", acc, " \\1"), str) }, DT$Positions.in.Master.Proteins, accessions) # 查看结果 cat(DT$Positions.in.Master.Proteins, sep = "\n")
方法2:使用stringr包(语法更简洁)
如果习惯tidyverse风格,用stringr的函数更直观:
# 首次使用需安装包 # install.packages("stringr") library(stringr) # 提取登录号 accessions <- str_extract(DT$Positions.in.Master.Proteins, "^\\w+") # 批量替换 DT$Positions.in.Master.Proteins <- mapply(function(str, acc) { str_replace_all(str, "; (\\d+xPhospho)", paste0("; ", acc, " \\1")) }, DT$Positions.in.Master.Proteins, accessions) # 查看结果 cat(DT$Positions.in.Master.Proteins, sep = "\n")
输出结果
Q8R149 2xPhospho [T131(100); T/S]; Q8R149 2xPhospho [T157(100); T/S] Q9UET0 3xPhospho [S23(90); T63(70); Y67(70)]; Q9UET0 3xPhospho]
内容的提问来源于stack exchange,提问作者John H
相关产品推荐
相关产品推荐

