在R中将表转换为fasta

时间:2014-04-29 19:56:47

标签: r fasta

我有一张这样的表:

>head(X)
column1    column2
sequence1 ATCGATCGATCG
sequence2 GCCATGCCATTG

我需要一个fasta文件中的输出,如下所示:

sequence1  
ATCGATCGATCG
sequence2  
GCCATGCCATTG

所以,基本上我需要第二列的所有条目成为新行,散布第一列。然后可以丢弃旧的第二列。

我通常这样做的方法是在记事本++中用\ n替换空格(或制表符),但我担心我的文件太大而无法做到这一点。

有没有办法在 R 中执行此操作?

3 个答案:

答案 0 :(得分: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

这样行名,列名和引号就会消失。

答案 1 :(得分:3)

我有同样的问题,但发现使用软件包将数据框转换为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")

答案 2 :(得分:0)

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

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

这会创建一个空字符向量,其长度是表长度的两倍;然后将column1中的值放在从1开始的每个第二个位置,并将每个第二个位置的column2的值从2开始。

然后使用writeLines编写:

writeLines(Xfasta, "filename.fasta")

在这个答案中,我添加了一个“&gt;”标题,因为这是fasta格式的标准,并且是一些采用fasta输入的工具所必需的。如果您不关心添加“&gt;”,那么:

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

如果您没有阅读文件中的选项以阻止字符作为因素被读取,那么您可能需要使用<- as.character(X$column1)。 还有一些工具可用于此转换,我认为Galaxy浏览器有一个选项。