有效地聚合大型 GRanges 中的垃圾箱
aggregate bins in large GRanges efficiently
我有一个 SummarizedExperiment(但我们可以将其视为 GRanges)。
我想要的是减少间隔的数量,每个相同的相邻只保留一行 mcol(gr)
,重要的是还要跟踪新的扩展间隔。
非常感谢!
gr <- GRanges(
seqnames = Rle(c("chr1"), c(12)),
ranges = IRanges(1:12*10, end = 1:12*10+5),
state1 = c(1,1,1,1,2,3,4,5,5,5,1,1),
state2 = c(1,1,1,2,2,2,5,5,6,6,1,1))
生成的 GRanges 应如下所示:
gr2 <- GRanges(
seqnames = Rle(c("chr1"), c(8)),
ranges = IRanges(start = c(10,40,50,60,70,80,90,110),
end = c(35,45,55,65,75,85,105,125)),
state1 = c(1,1,2,3,4,5,5,1), state2 = c(1,2,2,2,5,5,6,1))
编辑:我编辑了 Granges,以便在非相邻间隔中也存在状态对(第二个 1,1 对必须独立于第一个报告)
对不起,我最初的解决方案也是错误的!
非常感谢!
创建一个人为因素,确保级别按照因素中出现的顺序(而不是默认的字母顺序)以避免重新排列 GRanges,并拆分 GRanges
对象
f0 = paste(gr$state1, gr$state2, sep=".")
f = factor(f0, levels=unique(f0))
grl = split(gr, f)
获取范围和相关元数据
grf = unlist(range(grl), use.names=FALSE)
mcols(grf) = mcols(gr)[!duplicated(f),]
对于这种大小的数据,split()
、range()
和 unlist()
都应该是 'fast'。
要在染色体上也进行分裂,将其添加到因子
f0 = paste(seqnames(gr), gr$state1, gr$state2, sep=".")
要以其他方式拆分,例如,仅当状态相邻时,找出一种方法来生成适当的因子,例如,
f0 = paste(
seqnames(gr),
cumsum(c(TRUE, diff(gr$state1) != 0)),
cumsum(c(TRUE, diff(gr$state2) != 0)),
sep=".")
在 Bioconductor 上询问有关 Bioconductor 包的问题 support site。
我有一个 SummarizedExperiment(但我们可以将其视为 GRanges)。
我想要的是减少间隔的数量,每个相同的相邻只保留一行 mcol(gr)
,重要的是还要跟踪新的扩展间隔。
非常感谢!
gr <- GRanges(
seqnames = Rle(c("chr1"), c(12)),
ranges = IRanges(1:12*10, end = 1:12*10+5),
state1 = c(1,1,1,1,2,3,4,5,5,5,1,1),
state2 = c(1,1,1,2,2,2,5,5,6,6,1,1))
生成的 GRanges 应如下所示:
gr2 <- GRanges(
seqnames = Rle(c("chr1"), c(8)),
ranges = IRanges(start = c(10,40,50,60,70,80,90,110),
end = c(35,45,55,65,75,85,105,125)),
state1 = c(1,1,2,3,4,5,5,1), state2 = c(1,2,2,2,5,5,6,1))
编辑:我编辑了 Granges,以便在非相邻间隔中也存在状态对(第二个 1,1 对必须独立于第一个报告) 对不起,我最初的解决方案也是错误的!
非常感谢!
创建一个人为因素,确保级别按照因素中出现的顺序(而不是默认的字母顺序)以避免重新排列 GRanges,并拆分 GRanges
对象
f0 = paste(gr$state1, gr$state2, sep=".")
f = factor(f0, levels=unique(f0))
grl = split(gr, f)
获取范围和相关元数据
grf = unlist(range(grl), use.names=FALSE)
mcols(grf) = mcols(gr)[!duplicated(f),]
对于这种大小的数据,split()
、range()
和 unlist()
都应该是 'fast'。
要在染色体上也进行分裂,将其添加到因子
f0 = paste(seqnames(gr), gr$state1, gr$state2, sep=".")
要以其他方式拆分,例如,仅当状态相邻时,找出一种方法来生成适当的因子,例如,
f0 = paste(
seqnames(gr),
cumsum(c(TRUE, diff(gr$state1) != 0)),
cumsum(c(TRUE, diff(gr$state2) != 0)),
sep=".")
在 Bioconductor 上询问有关 Bioconductor 包的问题 support site。