基于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.
相关产品推荐
相关产品推荐

