gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:29:14 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com