在R中将table转换为fasta

jjjwad0x  于 2023-06-27  发布在  其他
关注(0)|答案(4)|浏览(157)

我有一张这样的table:

>head(X)
column1    column2
sequence1 ATCGATCGATCG
sequence2 GCCATGCCATTG

我需要一个fasta文件的输出,看起来像这样:

sequence1  
ATCGATCGATCG
sequence2  
GCCATGCCATTG

所以,基本上我需要第2列的所有条目成为新的行,穿插在第一列中。然后可以丢弃旧的第二列。
我通常的做法是在notepad++中用\n替换空白(或制表符),但我担心我的文件太大了。
有没有办法在R中做到这一点?

4sup72z8

4sup72z81#

我也有同样的问题,但发现了一个非常简单的方法来转换 Dataframe 到一个fasta文件使用包:“seqRFLP”。
请执行以下操作:安装并加载seqRFLP

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

您的序列需要位于数据框中,序列标题位于第1列,序列位于第2列[无论是核苷酸还是氨基酸]
下面是一个示例 Dataframe

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

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

df <- data.frame(names,sequences)

然后使用以下函数将 Dataframe 转换为.fasta格式:'dataframe2fas'

df.fasta = dataframe2fas(df, file="df.fasta")
5n0oy7gb

5n0oy7gb2#

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

因此行名称、列名称和引号将消失。

3duebb1j

3duebb1j3#

当我这样做的时候,我倾向于使用这样的东西:

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

这将创建一个空的字符向量,其长度是表长度的两倍;然后将column 1中的值放在从1开始的每隔一个位置,并将column 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浏览器有一个选项。

yeotifhr

yeotifhr4#

在头部添加>

X$column1 <- paste0(">",X$column1)

绑定header和seqs行

seqs_fasta <- c(rbind(X$column1, X$column2))

快速写入

write(x = seqs_fasta, file = "/home/../my_seqs.fasta")

相关问题