Identify closest intervals.
bed_closest(x, y, overlap = TRUE, suffix = c(".x", ".y"))
x | |
---|---|
y | |
overlap | report overlapping intervals |
suffix | colname suffixes in output |
tbl_interval()
with additional columns:
.dist
distance to closest interval. Negative distances
denote upstream intervals.
.overlap
overlap with closest interval
input tbls are grouped by chrom
by default, and additional
groups can be added using dplyr::group_by()
. For example,
grouping by strand
will constrain analyses to the same strand. To
compare opposing strands across two tbls, strands on the y
tbl can
first be inverted using flip_strands()
.
http://bedtools.readthedocs.io/en/latest/content/tools/closest.html
Other multiple set operations: bed_coverage
,
bed_intersect
, bed_map
,
bed_subtract
, bed_window
x <- trbl_interval( ~chrom, ~start, ~end, 'chr1', 100, 125 ) y <- trbl_interval( ~chrom, ~start, ~end, 'chr1', 25, 50, 'chr1', 140, 175 ) bed_glyph(bed_closest(x, y))x <- trbl_interval( ~chrom, ~start, ~end, "chr1", 500, 600, "chr2", 5000, 6000 ) y <- trbl_interval( ~chrom, ~start, ~end, "chr1", 100, 200, "chr1", 150, 200, "chr1", 550, 580, "chr2", 7000, 8500 ) bed_closest(x, y)#> # A tibble: 4 x 7 #> chrom start.x end.x start.y end.y .overlap .dist #> <chr> <dbl> <dbl> <dbl> <dbl> <int> <int> #> 1 chr1 500 600 550 580 30 0 #> 2 chr1 500 600 100 200 0 - 301 #> 3 chr1 500 600 150 200 0 - 301 #> 4 chr2 5000 6000 7000 8500 0 1001bed_closest(x, y, overlap = FALSE)#> # A tibble: 3 x 6 #> chrom start.x end.x start.y end.y .dist #> <chr> <dbl> <dbl> <dbl> <dbl> <int> #> 1 chr1 500 600 100 200 - 301 #> 2 chr1 500 600 150 200 - 301 #> 3 chr2 5000 6000 7000 8500 1001# Report distance based on strand x <- trbl_interval( ~chrom, ~start, ~end, ~name, ~score, ~strand, "chr1", 10, 20, "a", 1, "-" ) y <- trbl_interval( ~chrom, ~start, ~end, ~name, ~score, ~strand, "chr1", 8, 9, "b", 1, "+", "chr1", 21, 22, "b", 1, "-" ) res <- bed_closest(x, y) # convert distance based on strand res$.dist_strand <- ifelse(res$strand.x == "+", res$.dist, -(res$.dist)) res#> # A tibble: 2 x 14 #> chrom start.x end.x name.x score.x strand.x start.y end.y name.y score.y #> <chr> <dbl> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <chr> <dbl> #> 1 chr1 10.0 20.0 a 1.00 - 8.00 9.00 b 1.00 #> 2 chr1 10.0 20.0 a 1.00 - 21.0 22.0 b 1.00 #> # ... with 4 more variables: strand.y <chr>, .overlap <int>, .dist <int>, #> # .dist_strand <int># report absolute distances res$.abs_dist <- abs(res$.dist) res#> # A tibble: 2 x 15 #> chrom start.x end.x name.x score.x strand.x start.y end.y name.y score.y #> <chr> <dbl> <dbl> <chr> <dbl> <chr> <dbl> <dbl> <chr> <dbl> #> 1 chr1 10.0 20.0 a 1.00 - 8.00 9.00 b 1.00 #> 2 chr1 10.0 20.0 a 1.00 - 21.0 22.0 b 1.00 #> # ... with 5 more variables: strand.y <chr>, .overlap <int>, .dist <int>, #> # .dist_strand <int>, .abs_dist <int>