перебирать записи FASTA и переименовывать дубликаты

У меня есть файл FASTA с большим количеством записей. Хотя все последовательности ДНК различны, некоторые названия FASTA идентичны. Если существует несколько копий имени, я хотел бы добавить номер, чтобы они стали уникальными именами. Например:

>NAME
ATTTTTGGGGGGTGTGTG
>NAME
ATTTTTTTTCGCGCGC
>NAME
AAACCCTTTGTG

станет:

>NAME_1
ATTTTTGGGGGGTGTGTG
>NAME_2
ATTTTTTTTCGCGCGC
>NAME_3
AAACCCTTTGTG

благодаря.

Обновить. Поскольку я все равно планировал использовать это в R, я импортировал последовательность fasta в R и использовал ее как фрейм данных, df. Затем я могу переименовать его по своему желанию, используя следующую строку:

library(plyr)
ddply(df, Name_Column, transform, Column = paste(Name_Column,seq_along(Name_Column), sep=""))

код, вдохновленный этим сообщением


person zach    schedule 19.10.2011    source источник


Ответы (2)


Пакет Biostrings из Bioconductor имеет

library(Biostrings)
fa = read.DNAStringSet(...)

потом

names(fa) = make.unique(names(fa))
write.XStringSet(fa, ...)

или другие полезные манипуляции.

person Martin Morgan    schedule 20.10.2011
comment
спасибо Мартин. Я использовал Biostrings для импорта моего FASTA, но не знал, что у них есть функция make.unique (). Это очень полезно. Как видите, я использовал подход с фреймами данных, но мне пришлось перейти от контейнера Biostring к фреймворку данных, для чего потребовалось несколько дополнительных шагов. Спасибо - person zach; 20.10.2011
comment
@zach make.unique фактически находится в базе R; мы просто используем это здесь. - person Martin Morgan; 20.10.2011

Вы можете использовать следующую команду AWK:

$ echo -e ">A\nNNNN\n>A\nNNNNNNN" |\
awk '/^>/ { printf("%s_%s\n",$0,i++);next;} { print $0;}'

>A_0
NNNN
>A_1
NNNNNNN

См. Также Biostar: http://biostar.stackexchange.com

person Pierre    schedule 19.10.2011
comment
+1 - Если я правильно понимаю, достаточно сделать каждое имя последовательности уникальным - добавив уникальный индекс ко всем именам последовательностей, независимо от того, были они дубликатами или нет. Добавление индексов только к дубликатам возможно, но немного сложнее. - person Andy Thomas; 19.10.2011
comment
спасибо Пьер. Этот сценарий awk действительно добавит уникальный идентификатор к каждой записи FASTA. в идеале, как предлагает @andythomas-cramer, сценарий будет добавлять его только к дубликатам, а счетчик сбрасывается для каждой дублирующейся пары. - person zach; 19.10.2011
comment
@zach, дубликаты в файле расположены рядом или разложены? Кроме того, известно ли, что каждая последовательность перечислена ровно в одной строке в дополнение к строке описания? - person Andy Thomas; 19.10.2011
comment
@ andythomas-cramer дубликаты не обязательно соседствуют друг с другом. все последовательности представляют собой ровно одну строку и имеют одинаковую длину. В конечном итоге я хотел бы использовать эти данные в R, поэтому я думаю об импорте файла fasta в качестве таблицы данных, сортировке таблицы, а затем их разделении / перенумерации. Командная строка была бы проще и лучше, хотя я изначально хотел записывать каждую запись в новый файл, а затем выполнять поиск, чтобы увидеть, существует ли уже такое имя. - person zach; 19.10.2011
comment
@zach - если вы отсортируете последовательности по имени, вы можете сделать это за один проход, предварительно просматривая следующую последовательность перед записью текущей. В качестве альтернативы вы можете сохранить сопоставление имен с счетчиками при чтении файла FASTA в исходном порядке с одним проходом для (A, A1, A2 ...) и двумя проходами для (A1, A2, A3). - person Andy Thomas; 19.10.2011