R 识别数组中的最大分数

R 识别数组中的最大分数,r,bioinformatics,bioconductor,R,Bioinformatics,Bioconductor,我有一个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"

我有一个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个氨基酸单位并计算平均值来做类似的事情,但这很笨拙。

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

library(magrittr) ## just for %>% operator
n <- 10
seq <- amino_acids$`Bepipred Score` %>% TTR::SMA(.,n=n) %>% na.omit()
然后我们简单地检查哪个是最高的

## best indexes
(which.max(seq)):(which.max(seq) + n - 1)
[1] 1:10

正是我想做的,谢谢。对于这个小例子,我可以看到过程。这也使得提取n个最高平均值变得相当简单,因此感谢您。
## best indexes
(which.max(seq)):(which.max(seq) + n - 1)
[1] 1:10