2015-10-31 5 views
0

У меня есть загрузка последовательностей ДНК.как вывести строку определенной длины с использованием agrep в R

Я хочу, чтобы соответствовать части последовательности и я хочу вернуть матч до определенной длины

dataframe 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 символов с конца матча. На данный момент это дает мне целую последовательность, которую я не могу использовать

+0

Вы не можете захватить группы в agrep, как вы делаете с grep. Вы не можете сказать «дайте мне подходящую подстроку». Вы говорите: «вот последовательность строк, найдите, какие из них соответствуют этому шаблону, используя наименьшее количество вставок, удалений или замещений», и алгоритм просто возвращает вам соответствующие строки. Их совпадение или несоответствие вычисляется по всей строке. – kliron

ответ

0

Смотрите мой комментарий выше. Я не думаю, что вы можете достичь того, что вы пытаетесь сделать здесь с agrep. Если последовательность ДНК, которую вы пытаетесь определить нечетким образом, имеет предсказуемое количество и положение нуклеотидной вставки/удаления/замены, то просто используйте одно (или несколько) регулярных выражений с группами захвата, чтобы извлечь то, что вам нужно.

Если различия не являются предсказуемыми, и вы действительно нуждаетесь в нечеткий матче, вы могли бы использовать алгоритм перебора, как в следующем:

  1. разбить каждый из ваших строк ДНК в случайные позиции, такие как к производят различные 146 нуклеотидных длинных последовательностей.

  2. Использование «порога» max.distance run agrep для результирующих последовательностей и выбора тех, которые соответствуют.

  3. Из приведенного выше набора выберите из лучших матчей, запустив agrep с последовательным использованием меньшего max.distances, пока вы не получите один (ы) вы заинтересованы в.

Чем больше различных 146 нуклеотидных последовательностей вы выберите более точный результат, который вы получите. Если вы хотите найти наилучшее совпадение, используйте исчерпывающий поиск, пропустив каждую последовательность ДНК с самого начала, разбив ее на 146 фрагментов нуклеотидов и выполнив описанный выше алгоритм, оставив один нуклеотид с самого начала, выбрав следующие разделы и так далее до конца.

Надеюсь, что это поможет или дает лучшие идеи.

+0

Если я получаю agrep, чтобы вернуть совпадение, я могу вставить его в новый столбец, а затем в соответствующий grep, чтобы вернуть совпадение и 146 дополнительных нуклеотидов. Но как cna я получаю agrep, чтобы вернуть матч? –

+0

Или есть альтернативный пакет, который вернет сам матч? –

+0

Вы можете получить только всю последовательность совпадений. «Сама совпадение» - это целая последовательность соответствия *. Чтобы лучше понять это, google «расстояние Левенштейна». – kliron

Смежные вопросы