如何从R中的模糊字符串匹配返回实际匹配

时间:2015-10-31 19:15:13

标签: r

我有大量的DNA序列,我需要能够匹配那些具有特定字符串的序列。然而,目标存在一些变化,因此Im与模糊匹配相匹配。我喜欢得到实际的匹配而不是整个序列。 agrep不这样做。有谁知道任何包裹吗?

示例数据框RepeatAlusSequencesdf

>chr1:61695-62229      aattccaagagtattattgcaccaaaaggcatggacttaaaattcttgatacatgatttcaaaatattttctttaaggtttgaatcagtctatattccctccagcagcgtataaaagtgccaatttctctgatccttagccagtttgggtaataataattgtaaaacttttttttctttttttttgagacagagtctccctctgtcgccaggctgaagtgcagtggcgcaatctcggctcactgcaacctccgcctcccggggtcaagctattctcctgcctcagcctcccaagtagctgggactacaggcatgcaccaccatgcccagctaatttttgttatttttagtagagatggagtttccccatgttggacaggatggtctcgatctcttgacctcgtgatccaccctcctcggcctcccaaagtgctgggataacaggcgtgaacaaccatgcccggcctgtaaaactttttcctaatttaacagaaaaataatagtattatattttatcatatttctttgatttcta

>chr1:101718-102194   taaaaataaatgtattaagtatgaacaacaaaaaagctagtaaaggttgaacaacaactatccttaggaaagtggaaataatgtattaataaatatgaaagcaggctagccacggtgactcacatctgtaatcccagcactttgggaggctgaggcaggcagatcacctgaggtcaggagttccagaccagcctggccaacatggtgaaatcttgtctctcctacaaatacaaaaactagccaggcttggttgtgcactcctgtaattcgagctacttgggaggctgaggcaggagaatctcttgaacctgagaggcagaggttgcagtgagccaagatcatgccactgcactccagctggggcaacagagtgacactccatctcaaaataaataaataagaaagcagaaactaataaactagaaaacagaaacatagaactaatttataaatcaaagcactatgccttgaaaaga

我使用的代码:

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

我喜欢返回的内容:

aacctcaaagactggcctca
aacctcattgactggcctca

而不是整个序列

1 个答案:

答案 0 :(得分:0)

可能有一个专门的包来执行此操作,但这可行:我创建一个子串的向量,其长度与您要匹配的字符串相同。然后我使用agrep来识别匹配的子串。

#long string
s1<-"aattccaagagtattattgcaccaaaaggcatggacttaaaattcttgatacatgatttcaaaatattttctttaaggtttgaatcagtctatattccctccagcagcgtataaaagtgccaatttctctgatccttagccagtttgggtaataataattgtaaaacttttttttctttttttttgagacagagtctccctctgtcgccaggctgaagtgcagtggcgcaatctcggctcactgcaacctccgcctcccggggtcaagctattctcctgcctcagcctcccaagtagctgggactacaggcatgcaccaccatgcccagctaatttttgttatttttagtagagatggagtttccccatgttggacaggatggtctcgatctcttgacctcgtgatccaccctcctcggcctcccaaagtgctgggataacaggcgtgaacaaccatgcccggcctgtaaaactttttcctaatttaacagaaaaataatagtattatattttatcatatttctttgatttcta"
my.string <-"aacctcaaagactggcctca"
substrings <-substring(s1,seq(1,nchar(s1)-nchar(my.string)+1,1),seq(nchar(my.string),nchar(s1),1))
agrep(my.string, substrings,ignore.case = TRUE, max.distance = 0.35,value = TRUE)

[1] "caccaaaaggcatggactta" "accaaaaggcatggacttaa"