从文件中提取数据 - 忽略前导注释行,但包含以#开头的后续行

时间:2013-12-24 16:25:15

标签: r

我有一个文本文件,它总是有一个标题(在行的开头没有“#”)。标题之前可能有一些行,每行的开头都有“#”。数据中可能有一些行,也以“#”

开头

我需要在标题之前标识这些“#”符号行,并在读取文件之前跳过它们。

数据

#version 2.4    
##  
## Oncotator v1.0.0.0rc16| Gaf 3.0 | UniProt_AAxform 2011_09    
## OxoG Filter v3   
Hugo_Symbol Entrez_Gene_Id
BAGE1   0
BAGE1   0
#errt      23
RTRRT      23

我想跳过4行并用标题读取文件 我试过了

dum.data<-readLines(filename)
top<-"^#"
if(grepl((top,dum.data[1])){
    ret <- grep(top,dum.data)
}

但在这种情况下,我需要在标题之前仅识别“#”行(如果有的话)。不在数据之间。

1 个答案:

答案 0 :(得分:2)

使用rlediff检查主要评论专线。仅删除第一个组,并且仅当它位于任何非注释行之前时:

r <- rle(diff(grep('^#', dum.data)))
dum.data <- if (length(r$values) && r$values[1] == 1) tail(dum.data, -(r$lengths[1]+1)) else dum.data
dum.data
## [1] "Hugo_Symbol Entrez_Gene_Id"
## [2] "BAGE1   0"                 
## [3] "BAGE1   0"                 
## [4] "#errt      23"             
## [5] "RTRRT      23"             

然后使用它初始化textConnection并阅读表格。