如何将FASTA读入数据帧并提取R中FASTA文件的子序列

Pau*_*l.j 14 r bioinformatics subset fasta

我有一个小的DNA序列快速文件,看起来像这样:

>NM_000016 700 200 234
ACATATTGGAGGCCGAAACAATGAGGCGTGATCAACTCAGTATATCAC

>NM_000775 700 124 236
CTAACCTCTCCCAGTGTGGAACCTCTATCTCATGAGAAAGCTGGGATGAG

>NM_003820 700 111 222
ATTTCCTCCTGCTGCCCGGGAGGTAACACCCTGGACCCCTGGAGTCTGCA
Run Code Online (Sandbox Code Playgroud)

问题:

1)如何将此fasta文件读入R作为数据帧,其中每一行是序列记录,第一列是refseqID,第二列是序列.

2)如何在(开始,结束)位置提取子序列?

NM_000016 1  3 #"ACA"
NM_000775 2  6 #"TAACC"
NM_003820 3  5 #"TTC"
Run Code Online (Sandbox Code Playgroud)

sgi*_*ibb 14

你应该看一下Biostrings包.

library("Biostrings")

s = readDNAStringSet("nm.fasta")
subseq(s, start=c(1, 2, 3), end=c(3, 6, 5))
Run Code Online (Sandbox Code Playgroud)


小智 7

library("Biostrings")

fastaFile <- readDNAStringSet("my.fasta")
seq_name = names(fastaFile)
sequence = paste(fastaFile)
df <- data.frame(seq_name, sequence)
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下你的答案吗 (2认同)

Pau*_*l.j 5

受上面sgibb回答的启发,我回答第一个问题如下:

#read fasta file into R as a dataframe: 1st column as "RefSeqID", 2nd column as "seq"

library("Biostrings")
fasta2dataframe=function(fastaFile){
s = readDNAStringSet(fastaFile)
RefSeqID = names(s)
RefSeqID = sub(" .*", "", RefSeqID) 
#erase all characters after the first space: regular expression matches a space followed by any sequence of characters and sub replaces that with a string having zero  characters 

for (i in 1:length(s)){
seq[i]=toString(s[i])
}

RefSeqID_seq=data.frame(RefSeqID,seq)
return(RefSeqID_seq)
}
Run Code Online (Sandbox Code Playgroud)

例子:

mydf = fasta2dataframe(myFastaFile.fasta)
Run Code Online (Sandbox Code Playgroud)