【发布时间】:2022-11-23 02:09:07
【问题描述】:
使用 data.table 包中的 foverlaps 函数,我得到重叠区域(它只显示 25 行,但它超过 50,000 行),我想根据以下标准对每个 id 的重叠区域进行分组:
如果它们具有相同的 ID 和属于相同或不同组的重叠区域,则:
- 将它们全部分组,2) 扩展范围(即 start = min(重叠项集)和 end = max(重叠项集)),以及 3) 放置最高分组的名称。
例如,给定数据集:
dt <- data.table::data.table( ID=c("1015_4_1_1","1015_4_1_1","1015_4_1_1","103335_0_1_2","103335_0_1_2", "103335_0_1_2","11099_0_1_1","11099_0_1_1","11099_0_1_1","11099_0_1_1","11099_0_1_1", "11702_0_1_1","11702_0_1_1","11702_0_1_1","11702_0_1_5","11702_0_1_5","11702_0_1_5", "140331_0_1_1","140331_0_1_1","140331_0_1_1","14115_0_1_7","14115_0_1_7", "14115_0_1_7","14115_0_1_8","14115_0_1_8"), start=c(193,219,269,149,149,163,51,85,314,331,410,6193,6269,6278,6161,6238,6246,303,304,316,1525,1526,1546,1542,1543), end=c(307,273,399,222,235,230,158,128,401,428,507,6355,6337,6356,6323,6305,6324,432,396,406,1603,1688,1612,1620,1705), group=c("R7","R5","R5","R4","R5","R6","R7","R5","R4","R5","R5","R5","R6","R4","R5","R6","R4","R5","R4","R6","R4","R5","R6","R4","R5"), score=c(394,291,409,296,319,271,318,252,292,329,252,524,326,360,464,340,335,515,506,386,332,501,307,308,443) )预期结果是:
# 1015_4_1_1 193 399 R5 409 # 103335_0_1_2 149 235 R5 319 # 11099_0_1_1 51 158 R7 318 # 11099_0_1_1 314 507 R5 329 # 11702_0_1_1 6193 6356 R5 524 # 11702_0_1_5 6161 6324 R5 464 # 140331_0_1_1 303 432 R5 515 # 14115_0_1_7 1525 1705 R5 501请注意,对于每个 ID,可能存在相互不重叠的区域子组,例如在“11099_0_1_1”中,第 7 行和第 8 行被分组在一个子组中,其余部分在另一个子组中。
我没有使用
GenomicRanges或IRanges的经验,并且在另一条评论中读到data.table通常更快。因此,由于我期望有很多重叠区域,所以我从data.table开始使用 foverlaps,但我不知道如何进行。我希望你能帮助我,非常感谢你提前
【问题讨论】:
-
为什么
11702_0_1_5不在 464 的解决方案中?那是和11702_0_1_1一样的 ID 吗?而且第一组不就是最高分394吗? -
你是对的,我编辑了我的问题
标签: r dplyr group-by data.table iranges