我想知道如何将坐标重叠的线分组。
我正在尝试根据段(线)中的坐标合并重叠。
例如,我有:
tibble(
target = c("a", "a", "a", "b", "b", "c", "c", "c", "c"),
query = c("D", "D", "D", "D", "E", "D", "D", "E", "E"),
start = c( 3, 10, 30, 8, 16, 7, 9, 16, 25),
end = c( 12, 15, 45, 15, 20, 12, 14, 32, 31)
) -> d
或
# A tibble: 9 x 4
target query start end
<chr> <chr> <dbl> <dbl>
1 a D 3 12
2 a D 10 15
3 a D 30 45
4 b D 8 15
5 b E 16 20
6 c D 7 12
7 c D 9 14
8 c E 16 32
9 c E 25 31
配对目标查询是两者之间相等区域的映射,但是有时候配对中有多个匹配项时,匹配可能会重叠。
所以,我正在尝试这样做
> d %>%
+ group_by(target, query) %>%
+ arrange(start,end) %>%
+ summarise(
+ start = min(start),
+ end = max(end)
+ )
# A tibble: 5 x 4
# Groups: target [?]
target query start end
<chr> <chr> <dbl> <dbl>
1 a D 3 45
2 b D 8 15
3 b E 16 20
4 c D 7 14
5 c E 16 32
如您所见,输出错误。我想我应该以某种方式将重叠的线分组,但我不知道该怎么做。
预期输出为:
target query start end
<chr> <chr> <dbl> <dbl>
1 a D 3 15
2 a D 30 45
3 b D 8 15
4 b E 16 20
5 c D 7 14
6 c E 16 32
这种goup_by
重叠使用必须用于其他方法。
感谢您的帮助。 预先感谢
答案 0 :(得分:1)
#undef complex
给出以下输出:
d %>%
group_by(target, query) %>%
arrange(start) %>%
group_by(index = cumsum(cummax(lag(end, default = first(end))) < start), target, query) %>%
summarise(start = first(start), end = max(end)) %>%
arrange(target)
如果不需要,您可以继续删除# A tibble: 6 x 5
# Groups: index, target [4]
index target query start end
<int> <chr> <chr> <dbl> <dbl>
1 0 a D 3 15
2 1 a D 30 45
3 0 b D 8 15
4 0 b E 16 20
5 0 c D 7 14
6 0 c E 16 32
列。