我有9个FASTA文件,代表9个基因的DNA测序。
每个FASTA文件包含121个序列,代表121个菌株。每个序列的名称是每个菌株的ID。
但是,在每个文件中,ID都没有排序,例如在gene1.fasta中:
>1
AAA
>16
TTT
>2
GGG
...
在gene2.fasta中:
>2
CCC
>34
AAA
>1
GGG
...
我想将这9个基因的FASTA文件更改为121个菌株FASTA文件,在每个文件中,只需将9个基因组合为一个菌株。例如,在train1.fasta中:
AAAGGG
strain2.fasta中的
GGGCCC
如何在R中做到这一点?
答案 0 :(得分:0)
这是根据要求在R中提供的解决方案,它使用Biostrings
包来读取fasta文件。
它可以工作,但是我不得不说这是我很长时间以来编写的最丑陋的代码。我只是想看看是否能以某种方式完成此任务-这不是100%的最佳解决方案。
library("Biostrings")
library("tidyverse")
convertStringSet = function(seq){
return(df = data.frame("names" = names(seq), "seq" = paste(seq)))
}
# change the path accordingly
filenames = list.files("/home/x/y/z", pattern="gene*", full.names=TRUE)%>%
lapply(readDNAStringSet)
fastaDF = filenames %>% lapply(convertStringSet) %>%
reduce(full_join, by = "names") %>%
unite("seq", -1, sep="")
writeOutput = function(x){
header = paste(">",x[1],sep="")
fileName = paste("strain",x[1],".fasta",sep="")
writeLines(c(header,x[2]), fileName)
}
apply(fastaDF, 1, writeOutput)
或者,如果您使用的是UNIX系统,则该awk行应提供相同的结果:
awk '$0 ~ /^>/ {i=substr($0,2); next;} i != -1 {printf "%s", $0 >> "file"i; i=-1;}' gene*