相关疑难解决方法(0)

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

我有一个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)

在此先感谢您的帮助.

r range overlap dataframe data.table

11
推荐指数
1
解决办法
2407
查看次数

折叠相交的区域

我试图找到一种方法来折叠具有相交范围的行,用"开始"和"停止"列表示,并将折叠值记录到新列中.例如,我有这个数据框:

my.df<- data.frame(chrom=c(1,1,1,1,14,16,16), name=c("a","b","c","d","e","f","g"), start=as.numeric(c(0,70001,70203,70060, 40004, 50000872, 50000872)), stop=as.numeric(c(71200,71200,80001,71051, 42004, 50000890, 51000952)))


chrom name  start   stop
 1    a        0    71200
 1    b    70001    71200
 1    c    70203    80001
 1    d    70060    71051
14    e    40004    42004
16    f 50000872 50000890
16    g 50000872 51000952
Run Code Online (Sandbox Code Playgroud)

我试图找到重叠的范围并记录"开始"和"停止"中折叠的重叠行所涵盖的最大范围以及折叠行的名称,所以我会得到:

chrom start   stop      name
 1    70001    80001    a,b,c,d
14    40004    42004    e
16    50000872 51000952 f,g
Run Code Online (Sandbox Code Playgroud)

我想我可以像这样使用IRanges包:

library(IRanges)
ranges <- split(IRanges(my.df$start, my.df$stop), my.df$chrom)
Run Code Online (Sandbox Code Playgroud)

但是我在收到折叠列时遇到了麻烦:我尝试过findOvarlaps但是这个

ov <- findOverlaps(ranges, ranges, type="any")
Run Code Online (Sandbox Code Playgroud)

但我不认为这是对的.

任何帮助将非常感激.

r bioinformatics overlap

10
推荐指数
2
解决办法
2733
查看次数

标签 统计

overlap ×2

r ×2

bioinformatics ×1

data.table ×1

dataframe ×1

range ×1