Преобразование таблицы в fasta в R

У меня есть такая таблица:

>head(X)
column1    column2
sequence1 ATCGATCGATCG
sequence2 GCCATGCCATTG

Мне нужен вывод в файле fasta, выглядящий так:

sequence1  
ATCGATCGATCG
sequence2  
GCCATGCCATTG

Итак, в основном мне нужно, чтобы все записи 2-го столбца стали новыми строками, перемежая первый столбец. Затем старый 2-й столбец можно отбросить.

Обычно я делаю это, заменяя пробел (или табуляцию) на \n в блокноте ++, но я боюсь, что мои файлы будут слишком большими для этого.

Есть ли способ сделать это в R?


person user3586764    schedule 29.04.2014    source источник
comment
Что не так с поиском в гугле по запросу конвертировать в fasta R?   -  person Henrik    schedule 30.04.2014
comment
Вы уверены, что принятый ответ делает то, что вы хотите. Вам нужно > перед именами, чтобы быть в формате fasta.   -  person beroe    schedule 30.04.2014


Ответы (3)


D <- do.call(rbind, lapply(seq(nrow(X)), function(i) t(X[i, ])))
D
#         1             
# column1 "sequence1"   
# column2 "ATCGATCGATCG"
# column1 "sequence2"   
# column2 "GCCATGCCATTG"

Затем, когда вы пишете в файл, вы можете использовать

write.table(D, row.names = FALSE, col.names = FALSE, quote = FALSE)
# sequence1
# ATCGATCGATCG
# sequence2
# GCCATGCCATTG

так что имена строк, имена столбцов и кавычки исчезнут.

person Rich Scriven    schedule 29.04.2014

У меня был тот же вопрос, но я нашел очень простой способ преобразовать фрейм данных в файл fasta с помощью пакета: «seqRFLP».

Сделайте следующее: Установите и загрузите seqRFLP.

install.packages("seqRFLP")
library("seqRFLP")

Ваши последовательности должны быть во фрейме данных с заголовками последовательностей в столбце 1 и последовательностями в столбце 2 [не имеет значения, нуклеотиды это или аминокислоты]

Вот образец фрейма данных

names <- c("seq1","seq2","seq3","seq4")

sequences<-c("EPTFYQNPQFSVTLDKR","SLLEDPCYIGLR","YEVLESVQNYDTGVAK","VLGALDLGDNYR")

df <- data.frame(names,sequences)

Затем преобразуйте фрейм данных в формат .fasta с помощью функции: 'dataframe2fas'

df.fasta = dataframe2fas(df, file="df.fasta")
person Steph Bannister    schedule 10.05.2016

Когда я это делаю, я склонен использовать что-то вроде:

Xfasta <- character(nrow(X) * 2)
Xfasta[c(TRUE, FALSE)] <- paste0(">", X$column1)
Xfasta[c(FALSE, TRUE)] <- X$column2

Это создает пустой вектор символов, длина которого вдвое превышает длину вашей таблицы; затем помещает значения из столбца1 в каждую вторую позицию, начиная с 1, и значения столбца2 в каждую вторую позицию, начиная с 2.

затем напишите с помощью writeLines:

writeLines(Xfasta, "filename.fasta")

В этом ответе я добавил «>» к заголовкам, так как это стандартно для формата fasta и требуется некоторыми инструментами, которые принимают ввод fasta. Если вам не нужно добавлять «>», то:

Xfasta <- character(nrow(X) * 2)
Xfasta[c(TRUE, FALSE)] <- X$column1
Xfasta[c(FALSE, TRUE)] <- X$column2

Если вы не прочитали свой файл с параметрами, запрещающими чтение символов как факторов, вам может потребоваться вместо этого использовать <- as.character(X$column1). Есть также несколько инструментов для этого преобразования, я думаю, что в браузере Galaxy есть опция для этого.

person ping    schedule 29.04.2014