2015-09-11 2 views
0

У меня есть этот файл формата .vcf, я хочу прочитать этот файл в R. Однако этот файл содержит некоторые избыточные строки, которые я хочу пропустить. Я хочу получить что-то вроде результата, в котором строка начинается с строки, соответствующей #CHROM.Как читать файл vcf в R

Это то, что я пробовал:

chromo1<-try(scan(myfile.vcf,what=character(),n=5000,sep="\n",skip=0,fill=TRUE,na.strings="",quote="\"")) ## find the start of the vcf file 
skip.lines<-grep("^#CHROM",chromo1) 


column.labels<-read.delim(myfile.vcf,header=F,nrows=1,skip=(skip.lines-1),sep="\t",fill=TRUE,stringsAsFactors=FALSE,na.strings="",quote="\"") 
num.vars<-dim(column.labels)[2] 

myfile.vcf

#not wanted line 
    #unnecessary line 
    #junk line 
    #CHROM POS  ID  REF  ALT 
    11  33443 3  A  T 
    12  33445 5  A  G 

результат

#CHROM POS  ID  REF  ALT 
    11  33443 3  A  T 
    12  33445 5  A  G 
+1

Как об использовании пакета секвенирования? Есть несколько, если вы google "read vcf R" –

+1

Bioconductor имеет несколько считывателей VCF. – hrbrmstr

+0

@RichardScriven, что vcfreader не подходит в моем случае. Я просто хочу пропустить строки и получить таблицу, разделенную на вкладку. – MAPK

ответ

1

Может быть, это может быть хорошо для вас:

# read two times the vcf file, first for the columns names, second for the data 
tmp.vcf<-readLines("test.vcf") 
tmp.vcf.data<-read.table("test.vcf") 

# filter for the columns names 
tmp.vcf<-tmp.vcf[-(grep("#CHROM",tmp.vcf)+1):-(length(tmp.vcf))] 
vcf.names<-unlist(strsplit(tmp.vcf[length(tmp.vcf)],"\t")) 
names(tmp.vcf.data)<-vcf.names 

p.s .: Если у вас несколько файлов vcf, вы должны использовать функцию lapply.

Бест, Роберт

Смежные вопросы