如何使用R中的agrep输出特定长度的字符串

时间:2015-10-31 12:41:40

标签: r

我有大量的DNA序列。

我想匹配序列的一部分,我想将匹配返回到特定长度

数据框df包含以下列:

V1和V2

>chr1:61695-62229      aattccaagagtattattgcaccaaaaggcatggacttaaaattcttgatacatgatttcaaaatattttctttaaggtttgaatcagtctatattccctccagcagcgtataaaagtgccaatttctctgatccttagccagtttgggtaataataattgtaaaacttttttttctttttttttgagacagagtctccctctgtcgccaggctgaagtgcagtggcgcaatctcggctcactgcaacctccgcctcccggggtcaagctattctcctgcctcagcctcccaagtagctgggactacaggcatgcaccaccatgcccagctaatttttgttatttttagtagagatggagtttccccatgttggacaggatggtctcgatctcttgacctcgtgatccaccctcctcggcctcccaaagtgctgggataacaggcgtgaacaaccatgcccggcctgtaaaactttttcctaatttaacagaaaaataatagtattatattttatcatatttctttgatttcta

>chr1:101718-102194   taaaaataaatgtattaagtatgaacaacaaaaaagctagtaaaggttgaacaacaactatccttaggaaagtggaaataatgtattaataaatatgaaagcaggctagccacggtgactcacatctgtaatcccagcactttgggaggctgaggcaggcagatcacctgaggtcaggagttccagaccagcctggccaacatggtgaaatcttgtctctcctacaaatacaaaaactagccaggcttggttgtgcactcctgtaattcgagctacttgggaggctgaggcaggagaatctcttgaacctgagaggcagaggttgcagtgagccaagatcatgccactgcactccagctggggcaacagagtgacactccatctcaaaataaataaataagaaagcagaaactaataaactagaaaacagaaacatagaactaatttataaatcaaagcactatgccttgaaaaga

我使用agrep来获得比赛。

RepeatAlusSequencesdfMatch <- RepeatAlusSequencesdf[agrep("aacctcaaagactggcctca", RepeatAlusSequencesdf[,2],ignore.case = TRUE, max.distance = 0.3), ]

但我也希望从比赛结束时返回146个字符的长度。目前,它给了我整个序列,我无法使用

1 个答案:

答案 0 :(得分:0)

请参阅上面的评论。我不认为你可以通过agrep实现你想要做的事情。如果你想要模糊匹配的DNA序列具有可预测的核苷酸插入/缺失/取代的数量和位置,那么只需使用一个(或几个)带有捕获组的正则表达式来提取你需要的东西。

如果差异无法预测且您确实需要模糊匹配,则可以使用如下的强力算法:

  1. 将每个DNA串分解成随机位置,以产生不同的146个核苷酸长的序列。

  2. 使用&#34;阈值&#34; max.distance对结果序列运行agrep并选择匹配的序列。

  3. 从上面的集合中,通过使用连续较小的max.distance运行agrep来选择最佳匹配,直到得到您感兴趣的那个。

  4. 您选择的146个核苷酸序列越多,您获得的结果就越准确。如果你想找到 最佳匹配,可以通过从头开始走每个DNA序列进行详尽的搜索,将其分解为146个核苷酸片并运行上述算法,然后从开头留下一个核苷酸,选择下一个分区,依此类推,直到结束。

    希望这有助于提供更好的想法。