read.table忽略表中的一些\ t和\ n

时间:2015-10-01 11:54:02

标签: r grep read.table

在从RNAseq实验中读取注释文件时,我遇到了一个奇怪的问题。

我试图在标签分隔文件(http://we.tl/qCjv4N3LF2)中读取,然后在模式" bahd"中搜索注释(在第四列中),以查找&#等条目34; bahd酰基转移酶dcr"然后显示属于这些条目的所有ID(第一列)。代码是:

ShootAnnot<-read.table("annotation1.txt",sep="\t")
matches<-grep("bahd",ShootAnnot[,4],ignore.case=TRUE)
ShootAnnot[matches,1]

奇怪的是,我注意到这并没有找到我知道的所有基因注释 - 在文件中只有12个匹配。当我在表格中扫描缺失的条目时,我发现文件中有一行似乎R无法解释分离模式&#34; \ t&#34;和&#34; \ n&#34;一点点。

查看数据集中的第4825行:

ShootAnnot[4825,]

由于某种原因,该行中的第六个单元格包含大量数据,包含许多完整的行和适当的&#34; \ t&#34;和&#34; \ n&#34;细胞和线分离模式都在一个细胞中。然后它突然跳回到正确分离细胞和细胞系。 我有一堆这些文件,所以我想确保我可以自动解决这些问题。可能导致这种情况的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定为什么会出现乱码(可能是DOS CR / LF的事情),但文件非常大,如果你将它插入data.table,你将获得相当不错的加速阅读数据。

library(data.table)
ShootAnnot <- fread("~/Downloads/annotation1.txt")
ShootAnnot[like(Blast2GO_GO_Description,"bahd"), "#ID", with=FALSE]

会给你

                       #ID
 1: c112902_g1_i1_m.105401
 2:    c11459_g1_i1_m.4290
 3:    c11459_g2_i1_m.4292
 4: c186946_g1_i1_m.110882
 5:    c24956_g1_i1_m.8768
 6: c265515_g1_i1_m.117383
 7:   c28096_g1_i1_m.10253
 8:   c37936_g1_i1_m.14867
 9:   c40683_g1_i1_m.17292
10:   c54651_g1_i1_m.34709
11:   c54651_g2_i1_m.34711
12:       c921_g1_i1_m.351

(你的文件中没有任何非小写&#34; bahd&#34;