识别整个数组的最大分数

问题描述 投票:0回答:1

我有一个569个氨基酸残基的序列,每个残基都得到一个分数。我想确定10个此类氨基酸的连续序列,以使得分最大化。有没有一种我可以做到的优雅方式?

amino_acids <- structure(
    list(
        Position=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20),
        Residue=c("M", "S", "A", "S", "K", "E", "V", "K", "S", "F", "L", "W", "T", "Q", "S", "L", "R", "R", "E", "L"),
        `Bepipred Score`=c(0.565, 0.709, 0.512, 0.516, 0.451, 0.291, -0.11, -0.409, -0.525, -0.548, -0.611, -0.795, -0.825, -0.864, -0.47, -0.387, 0.024, -0.044, -0.209, -0.309)
    ),
    row.names=c(NA, -20L),
    class=c("tbl_df", "tbl", "data.frame"))

这是前20个数据结构的示例。在这种情况下,序列1-10将是“最佳”,然后是2-11,然后是3-12,依此类推。

我已经能够通过将数据框分成10个氨基酸单元并计算平均值来做类似的事情,但它很笨拙。

r bioinformatics bioconductor
1个回答
1
投票

您可以使用简单的移动平均线,通常用于时间序列分析。一种方法是:

library(magrittr) ## just for %>% operator
n <- 10
seq <- amino_acids$`Bepipred Score` %>% TTR::SMA(.,n=n) %>% na.omit()

这里我们已经计算了移动平均值,并且省略了前n-1个值,因为它们是NA。 (您必须至少具有n个值才能计算平均值)

seq
[1]  0.1452  0.0276 -0.1228 -0.2565 -0.3945 -0.4866 -0.5544 -0.5410 -0.5045 -0.4729 -0.4490

然后我们只需检查哪个最高,

## best indexes
(which.max(seq)):(which.max(seq) + n - 1)
[1] 1:10
© www.soinside.com 2019 - 2024. All rights reserved.