我有一张这样的表:
>head(X)
column1 column2
sequence1 ATCGATCGATCG
sequence2 GCCATGCCATTG
我需要一个fasta文件中的输出,如下所示:
sequence1
ATCGATCGATCG
sequence2
GCCATGCCATTG
所以,基本上我需要第二列的所有条目成为新行,散布第一列。然后可以丢弃旧的第二列。
我通常这样做的方法是在记事本++中用\ n替换空格(或制表符),但我担心我的文件太大而无法做到这一点。
有没有办法在 R 中执行此操作?
答案 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浏览器有一个选项。