У меня есть GRanges
объект с разными геномными c диапазонами для каждого seqnames
(например, хромосомы).
Как я могу получить GRanges
, содержащий только самый длинный диапазон для каждого seqname / хромосомы?
Например, если gr
является GRanges
:
library(GenomicRanges)
# Make a GRanges object
set.seed(123)
gr <- GRanges(seqnames = rep(c("chr1", "chr2", "chr3"), times=2:4),
ranges = IRanges(start=sample.int(10000, 9),
width = c(3,5,50,20,10,500,100,500,200)))
# Add a column with the width for clarity:
mcols(gr)$width <- width(gr)
gr
#GRanges object with 9 ranges and 1 metadata column:
# seqnames ranges strand | width
# <Rle> <IRanges> <Rle> | <integer>
# [1] chr1 2463-2465 * | 3
# [2] chr1 2511-2515 * | 5
# [3] chr2 8718-8767 * | 50
# [4] chr2 2986-3005 * | 20
# [5] chr2 1842-1851 * | 10
# [6] chr3 9334-9833 * | 500
# [7] chr3 3371-3470 * | 100
# [8] chr3 4761-5260 * | 500
# [9] chr3 6746-6945 * | 200
# -------
# seqinfo: 3 sequences from an unspecified genome; no seqlengths
Тогда я хочу получить следующее GRanges
:
#GRanges object with 3 ranges and 1 metadata column:
# seqnames ranges strand | width
# <Rle> <IRanges> <Rle> | <integer>
# [1] chr1 2511-2515 * | 5
# [2] chr2 8718-8767 * | 50
# [3] chr3 9334-9833 * | 500
Для моего Приложение Я в порядке, получив только первый самый длинный диапазон для chr3
, но я был бы признателен за решение, которое также может выбрать все связи, если таковые имеются.