将data.frame拆分为2列

时间:2015-02-24 11:43:49

标签: r split dataframe fasta

我有一个fasta文件,我使用" read.delim"读取了fasta文件。到R.相应的data.frame如下所示:

>tm_sd_1256_2_1
MJAKDHRZTASDJASJDKASJDURUJDFLSDJFSDIFJKSDFKSJDFLJSDLFD
ASDJASDJ
>tm_sd_5672_1_2
AIZZTQBCSKLKDSHDADBCMSJHKQUWIRJHJJKKDLJSGDHASGDZGDHGHAGSDZASDASDVASGASDHGCAHGS
SADASDA[sample.fasta file][1]
>tm_sd_543_1_2
MUZTREQWERNBVXCYMNMVHZTOPOPOEURDASDOPOQWEUZQUIZRZIRIEIWUEWASDHASHDAHSDHAKHHSDHASHDJASHDAHUWIEUROWUOERUOWEUROOWWWW
>tm_sd_212_0_2
MTZTPSPASDASZDATSZGZASDZATSDASDARSDASDASDASDASDZTASZDTAXAYXFASTDRASRZWUEWERZWERZ

我想将这个data.frame分成两列。一列用于序列名称,另一列用于各个序列。

我创建了一个data.frame并将序列的名称存储在一列中但是当我尝试将相应的序列存储在另一列时,它给我一个错误,说替换有55行,数据有436行。

我尝试了以下代码,它给了我一个错误如下:

new_DF=NULL
new_DF$names=as.data.frame(names(fasta_seq))
new_DF$sequences=as.data.frame(fasta_seq)

如何使用R.实现这一目标。请指导我。

1 个答案:

答案 0 :(得分:0)

尝试

lines <- readLines('deena.fasta')
indx <- grepl('>', lines)
Sequence <- tapply(seq_along(indx),cumsum(indx), FUN=function(x) 
            paste(lines[tail(x,-1)], collapse=""))
d1 <- data.frame(names=lines[indx], Sequence, stringsAsFactors=FALSE)
head(d1,2)
#           names
#1 >tm_sd_1256_2_1
#2 >tm_sd_5672_1_2
                                                                           #                         Sequence
# 1                                              MJAKDHRZTASDJASJDKASJDURUJDFLSDJFSDIFJKSDFKSJDFLJSDLFDASDJASDJ
# 2 AIZZTQBCSKLKDSHDADBCMSJHKQUWIRJHJJKKDLJSGDHASGDZGDHGHAGSDZASDASDVASGASDHGCAHGSSADASDA[sample.fasta file][1]