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

基于R语言计算蛋白质序列肽段覆盖百分比(tidyverse优先)

计算肽段覆盖的氨基酸占比(tidyverse方案)

问题背景

现有一条含100个氨基酸的蛋白质,其氨基酸位置存储为:

Protein <- data.frame(AA = 1:100)

另一个data.frame记录了该蛋白质酶解后的肽段信息,包含每个肽段对应的蛋白质起始与终止氨基酸位置:

df <- data.frame(
  Peptides = c("Peptide_A", "Peptide_B", "Peptide_C", "Peptide_D"), 
  Initial.AA = c(1, 23, 59, 77), 
  Final.AA = c(18, 58, 70, 100)
)

该肽段数据的输出如下:

Peptides Initial.AA Final.AA
1 Peptide_A          1       18
2 Peptide_B         23       58
3 Peptide_C         59       70
4 Peptide_D         77      100

经检查,存在未被肽段覆盖的氨基酸区间(19-22和71-76,共10个),需计算被覆盖氨基酸的总百分比(本例预期结果为90%),要求优先使用tidyverse工具链实现。

解决方案

通过生成所有被肽段覆盖的氨基酸位置,统计其数量后计算占比:

library(tidyverse)

# 生成所有被肽段覆盖的氨基酸位置并去重
covered_aa <- df %>%
  rowwise() %>%
  mutate(AA = list(Initial.AA:Final.AA)) %>%
  unnest(AA) %>%
  distinct(AA)

# 计算覆盖百分比
coverage_rate <- (nrow(covered_aa) / max(Protein$AA)) * 100

# 输出结果
cat("被覆盖氨基酸的总百分比:", round(coverage_rate, 1), "%\n")

代码解释

  • rowwise() + mutate(AA = list(Initial.AA:Final.AA)):为每个肽段生成对应的连续氨基酸位置序列,存储为列表列
  • unnest(AA):将列表列展开为单个氨基酸位置的行记录
  • distinct(AA):去除重复的氨基酸位置(避免肽段重叠时重复计数)
  • 最后用被覆盖的氨基酸总数除以蛋白质总氨基酸数,乘以100得到百分比

运行代码后将输出:

被覆盖氨基酸的总百分比: 90 %

内容的提问来源于stack exchange,提问作者T.B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:52:16