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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:47:27