如何使用包含 R 中特定 ID 的数据帧对 fasta 文件进行子集化?

How to subset a fasta file using data frames containing specific IDs in R?

我有一个包含 794 个条目的复杂 fasta 文件,我想根据我创建的各种 ID 列表对这些条目进行子集化。

fasta文件格式如下:

>5_B1_CZ.1:572-889 ID:5_B1 Contig:1 
ATGTCCTGGATDCGTTACTTGTGTATTGCCGGTCCTC

根据之前的回答,我使用下面的代码读取了fasta文件。

fastafile<- read.fasta(file = "test.fasta", seqtype = "AA",as.string = TRUE, set.attributes = FALSE)

然后使用以下行根据包含 ID 列表的数据框对 fasta 文件进行子集化。

f<-fastafile[c(which(names(fastafile) %in% Allint$`All Intersect`))]

ID 列表的示例如下所示。

All Intersect
1 5_F2_CZ.13:475-2241
2 2_B8_CZ.9:133-1899

这似乎可行,但给出的输出具有各种 fasta ID 作为列 headers 以及下面各行中的序列。 (如图一)

由于这种格式,我在尝试将其导出为完整的 fasta 文件时遇到了问题。

有没有更简单的方法来完成这个任务?

对不起,如果这很复杂,我是 R 的新手。

几件事:

1) 要对您的 fasta 对象进行子集化,您不需要 cwhich

f<-fastafile[names(fastafile) %in% Allint$`All Intersect`)]

2) 要输出您拥有子集的序列,您需要使用 write.fasta 函数。这会将序列放回原处并写入一个 fasta 文件。

write.fasta(f, names(f), file.out="My_newfastaFile.fa")