比如把自己制作好的bam文件的坐标,跟提取自gtf文件的坐标信息对应起来,使用GenomicRanges
包自带的函数即可。
ann1 <- data.frame(
GeneID=c("gene1","gene1","gene2","gene2"),
Chr="chr_dummy",
Start=c(100,1000,3000,5000),
End=c(500,1800,4000,5500),
Strand=c("+","+","-","-"),
stringsAsFactors=FALSE)
ann1
ann1 <- with(ann1, GRanges(as.character(Chr),
IRanges(as.numeric(Start), as.numeric(End)),
as.character(Strand),
id = as.character(GeneID)))
ann1
ann2 <- data.frame(
peakID=c("peak1","peak1","peak2","peak2"),
Chr="chr_dummy",
Start=c(50,1500,3100,5400),
End=c(400,1900,4700,5500),
Strand=c("+","+","-","-"),
stringsAsFactors=FALSE)
ann2
ann2 <- with(ann2, GRanges(as.character(Chr),
IRanges(as.numeric(Start) , as.numeric(End)),
as.character(Strand),
id = as.character(peakID)))
ann2
gr3 = intersect(ann1,ann2)
gr3
library(ChIPpeakAnno)
o = findOverlaps(ann1,ann2)
str(o)
lo=cbind(as.data.frame(ann1[queryHits(o)]),
as.data.frame(ann2[subjectHits(o)]))
head(lo)
gr3
这里的重点其实是grange
对象和intersect
及findOverlaps
函数的使用。
关于 grange对象
三年前我在生信菜鸟团博客就多次强调过这个重点了,在R里面处理生物信息学数据是躲不过这个定义的,有点类似于各式各样的生物信息学文件格式,是一个标准。
对这个grange对象也会有很多很多的方法,假设有一个grange对象命名为exon_txdb
,来自于代码
library("TxDb.Hsapiens.UCSC.hg19.knownGene")
txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene
exon_txdb=exons(txdb)
genes_txdb=genes(txdb)
那么操作它的函数有:
- seqnames(exon_txdb)返回一个class ‘Rle’ [package “S4Vectors”] with 4 slots,有93个染色体信息,以及每条染色体上面有多少个外显子信息
- ranges(exon_txdb)返回外显子的起始终止位点,长度,以及其它信息,也是一个对象class ‘IRanges’ [package “IRanges”] with 6 slots
- strand(exon_txdb)返回外显子的正负链信息,要么在正链要么在负链
- mcols(exon_txdb)返回exon的id编号,1到27750个
- seqlengths(exon_txdb)返回每条染色体的长度信息
- names
- length
GRanges对象还有很多其它类型的操作,非常好玩的,split,shift,resize,flank,reduce,gaps,disjoin,coverage
其它求交集并集和都可以用,union,intersect,setdiff,pintersect,psetdiff
关于 findOverlaps
函数
本来应该是ChIPpeakAnno包带有的一个非常实用的peaks分析小工具,在我的GitHub很早以前关于ChIP-seq分析流程代码分析里面有提到。