Disjoin then aggregate a Ranges object
disjoin_ranges(.data, ...)
disjoin_ranges_directed(.data, ...)a Ranges object that is now disjoint (no bases overlap).
df <- data.frame(start = 1:10, width = 5, seqnames = "seq1",
strand = sample(c("+", "-", "*"), 10, replace = TRUE), gc = runif(10))
rng <- as_granges(df)
rng %>% disjoin_ranges()
#> GRanges object with 14 ranges and 0 metadata columns:
#> seqnames ranges strand
#> <Rle> <IRanges> <Rle>
#> [1] seq1 1 *
#> [2] seq1 2 *
#> [3] seq1 3 *
#> [4] seq1 4 *
#> [5] seq1 5 *
#> ... ... ... ...
#> [10] seq1 10 *
#> [11] seq1 11 *
#> [12] seq1 12 *
#> [13] seq1 13 *
#> [14] seq1 14 *
#> -------
#> seqinfo: 1 sequence from an unspecified genome; no seqlengths
rng %>% disjoin_ranges(gc = mean(gc))
#> GRanges object with 14 ranges and 1 metadata column:
#> seqnames ranges strand | gc
#> <Rle> <IRanges> <Rle> | <numeric>
#> [1] seq1 1 * | 0.926389
#> [2] seq1 2 * | 0.532395
#> [3] seq1 3 * | 0.411328
#> [4] seq1 4 * | 0.460153
#> [5] seq1 5 * | 0.531298
#> ... ... ... ... . ...
#> [10] seq1 10 * | 0.632732
#> [11] seq1 11 * | 0.580070
#> [12] seq1 12 * | 0.510734
#> [13] seq1 13 * | 0.756590
#> [14] seq1 14 * | 0.815093
#> -------
#> seqinfo: 1 sequence from an unspecified genome; no seqlengths
rng %>% disjoin_ranges_directed(gc = mean(gc))
#> GRanges object with 16 ranges and 1 metadata column:
#> seqnames ranges strand | gc
#> <Rle> <IRanges> <Rle> | <numeric>
#> [1] seq1 8-12 + | 0.0190209
#> [2] seq1 1-2 - | 0.9263888
#> [3] seq1 3-5 - | 0.5477917
#> [4] seq1 6 - | 0.1691946
#> [5] seq1 7 - | 0.4786359
#> ... ... ... ... . ...
#> [12] seq1 6 * | 0.601072
#> [13] seq1 7-8 * | 0.755295
#> [14] seq1 9 * | 0.785782
#> [15] seq1 10 * | 0.770734
#> [16] seq1 11-13 * | 0.698087
#> -------
#> seqinfo: 1 sequence from an unspecified genome; no seqlengths