我希望在我的 df 中标记具有重叠范围的行(希望创建重叠列)基于一系列数字变量(最小值,最大值),如有必要,我可以将其转换为整数:
Class Min Max
A 100 200
A 120 205
A 210 310
A 500 630
A 510 530
A 705 800
转变成:
Class Min Max Overlap
A 100 200 1
A 120 205 1
A 210 310 0
A 500 630 1
A 510 530 1
A 705 800 0
我尝试过 IRanges 没有取得多大成功 - 有什么想法吗?
最佳答案
我发现 data.table 对于重叠非常有效,使用 foverlaps
library(data.table)
重新创建数据:
dt <- data.table(Class = c("A", "A", "A", "A", "A", "A"),
Min = c(100, 120, 210, 500, 510, 705),
Max = c(200, 205, 310, 630, 530, 800))
键入 data.table,这是该功能所必需的:
setkey(dt, Min, Max)
我们在这里做
foverlaps
针对自身,然后过滤,删除与自身重叠的那些行。然后按 Min
分组计算行数和 Max
.dt_overlaps <- foverlaps(dt, dt, type = "any")[Min != i.Min & Max != i.Max, .(Class, Overlap = .N), by = c("Min", "Max")]
感谢 DavidArenburg
dt[dt_overlaps, Overlap := 1]
结果:
> dt
Class Min Max Overlap
1 A 100 200 1
2 A 120 205 1
3 A 210 310 NA
4 A 500 630 1
5 A 510 530 1
6 A 705 800 NA
可能有更简洁的 data.table 代码,但我也在学习。
关于r - 单个数据帧中的重叠范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40129485/