r - 单个数据帧中的重叠范围

标签 r

我希望在我的 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/

相关文章:

r - 仅分离变量名后转置

r - 提高 R 中 data.table 中两列的粘贴速度(可重现)

r - ggplot2:无法使用 geom_ribbon 为相交线之间的区域着色

r - 在 R 中跳过对 M1mac 的测试

r - 有没有办法在错误后继续 R 中的 for 循环而不使用 try() 或 tryCatch()

r - RStudio 和 R 中的运算符 "[<-"

r - 使用 ggplot2 获得反射(reflect)各个方面的百分比尺度

r - 使用 roxygen2 记录数据帧列表

r - 如何使用 dplyr 创建总频率表

r - 将字符串拆分为较小的字符串以在数据框中创建新行(在 R 中)