r - 在数据框中将重叠范围合并为唯一的组

标签 r dataframe data.table range overlap

我有 n 行和 3 的数据框

df <- data.frame(start=c(178,400,983,1932,33653),
    end=c(5025,5025, 5535, 6918, 38197),
    group=c(1,1,2,2,3))

df
  start   end group
1   178  5025     1
2   400  5025     1
3   983  5535     2
4  1932  6918     2
5 33653 38197     3

我想新建一个专栏df$group2将重叠的组重新分类为相同的组。例如,df$group[df$group==1]从 178 开始到 5025 结束。这与 df$group[df$group==2] 重叠,从 983 开始,到 6918 结束。我想创建一个新列,现在将第 1 组和第 2 组归为第 1 组(随后将第 3 组归为第 2 组)。

结果:
df
  start   end group group2
1   178  5025     1      1
2   400  5025     1      1
3   983  5535     2      1
4  1932  6918     2      1
5 33653 38197     3      2

在此先感谢您的帮助。

最佳答案

您需要 IRanges包裹:

require(IRanges)
ir <- IRanges(df$start, df$end)
df$group2 <- subjectHits(findOverlaps(ir, reduce(ir)))
> df

#  start   end group group2
# 1   178  5025     1      1
# 2   400  5025     1      1
# 3   983  5535     2      1
# 4  1932  6918     2      1
# 5 33653 38197     3      2

安装 IRanges , 在 R 中键入这些行:
source("http://bioconductor.org/biocLite.R")
biocLite("IRanges")

要了解更多信息(手册等),请访问 here

关于r - 在数据框中将重叠范围合并为唯一的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235821/

相关文章:

在 R 中重新编码任意分组变量或因子

Python Pandas Dataframe - 计算行之间的差异并取最小值

r - 在 R 中计算每个月最后 5 天的平均值

python - Bigquery(和 pandas)- 确保数据插入一致性

r - 各组之间进行比较

r - 如果对象是data.frame,如何获取相同记录的订单号?

r - 如何用R Shiny 的颜色突出显示特定单元格值

r - 在ggplot2中使用for循环保存图表

R 如何按条件连接data.table?

r - 根据条件从大数据表中的每个组中选择一行