在数据框中将重叠范围合并到唯一组中

use*_*292 11 r range overlap dataframe data.table

我有一个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
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列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
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Aru*_*run 14

你需要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
Run Code Online (Sandbox Code Playgroud)

要安装IRanges,请在R中键入以下行:

source("http://bioconductor.org/biocLite.R")
biocLite("IRanges")
Run Code Online (Sandbox Code Playgroud)

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

  • 如果我们有另一个分组变量,这可以与group_by()语句结合使用吗? (2认同)