我有一个具有一些基因组间隔和一些元数据的GRanges对象(3个向量,每个区域在3个不同的样本中覆盖)。我已经申请了:
disjoin(my_data)来获得一个新的GRanges对象,该对象具有最小的一组唯一的非重叠片段。
问题是我不能在新的GRanges对象中保存元数据。我想要得到的是基因组区域的平均覆盖率,其中包括这个独特的集合。
作为一个例子,我想将这个元数据:
sample1 sample2 sample3
1:1-3 30 NA NA
1:1-4 NA 40 35
1:4-5 35 NA NA
1:5-7 NA 50 50
1:6-7 60 NA NA 如下所示:
sample1 sample2 sample3
1:1 30 40 35
1:2 30 40 35
1:3 30 40 35
1:4 35 40 35
1:5 35 50 50
1:6 60 50 50
1:7 60 50 50我怎样才能做到这一点呢?
发布于 2020-03-23 22:40:23
下面是一种data.table方法,用于保存分离的范围集的元数据。
library(GRanges)
library(data.table)
data.disjoin <- disjoin(my_data)
overlaps <- as.data.frame(findOverlaps(data.disjoin,data))
coverage.disjoin <- as.data.table(cbind(overlaps,mcols(my_data)[overlaps$subjectHits,]))
coverage.disjoin <- coverage.disjoin[,
lapply(.SD[,-1],function(x){unique(x[!is.na(x)])}),
by="queryHits"]
mcols(data.disjoin) <- coverage.disjoin[,.(sample1,sample2,sample3)]首先,找到分离的范围集和原始数据之间的重叠。然后将重叠的覆盖率收集到data.table中。通过样本找到该范围的唯一覆盖率,删除NA值。请注意,.SD是表示组的子集data.table的特殊符号。最后,将结果重新连接到分离的数据上。
数据
my_data <- GRanges(
c("chr1","chr1","chr1","chr1","chr1")
,IRanges(c(1,1,4,5,6),c(3,4,5,7,7)),
sample1=c(30,NA,35,NA,60),
sample2=c(NA,40,NA,50,NA),
sample3=c(NA,35,NA,50,NA))https://stackoverflow.com/questions/60813777
复制相似问题