首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中读取vcf文件

如何在R中读取vcf文件
EN

Stack Overflow用户
提问于 2015-09-11 08:45:17
回答 2查看 14.9K关注 0票数 8

我有这个VCF format file,我想在R中读取这个文件。但是,这个文件包含一些多余的行,我想跳过。我想要得到类似于结果中的内容,其中行以匹配#CHROM的行开始。

这是我尝试过的:

代码语言:javascript
复制
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

代码语言:javascript
复制
    #not wanted line
    #unnecessary line
    #junk line
    #CHROM  POS     ID      REF     ALT
    11      33443   3        A       T
    12      33445   5        A       G

结果

代码语言:javascript
复制
    #CHROM  POS     ID      REF     ALT
    11      33443   3        A       T
    12      33445   5        A       G
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-11 17:14:34

也许这对你有好处:

代码语言:javascript
复制
# 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", stringsAsFactors = FALSE)

# 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

附言:如果你有多个vcf文件,那么你应该使用lapply函数。

最好的,罗伯特

票数 7
EN

Stack Overflow用户

发布于 2018-07-24 17:05:38

data.table::fread按预期读取,参见示例:

代码语言:javascript
复制
library(data.table)

#try this example vcf from GitHub
vcf <- fread("https://raw.githubusercontent.com/vcflib/vcflib/master/samples/sample.vcf")

#or if the file is local:
vcf <- fread("path/to/my/vcf/sample.vcf")

我们也可以使用vcfR包,参见手册中的链接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32513776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档