相关疑难解决方法(0)

在R中查找范围重叠

我有两个data.frames,每个都有三列:chrom,start和stop,让我们称它们为rangesA和rangesB.对于每行rangeA,我想找到rangeB中哪一行(如果有的话)完全包含rangesA行 - 我的意思是rangesAChrom == rangesBChrom, rangesAStart >= rangesBStart and rangesAStop <= rangesBStop.

现在我正在做以下,我不太喜欢.请注意,由于其他原因,我正在循环遍历rangeA的行,但这些原因都不是什么大问题,它最终会让这些特定解决方案更具可读性.

rangesA:

chrom   start   stop
 5       100     105
 1       200     250
 9       275     300
Run Code Online (Sandbox Code Playgroud)

rangesB:

chrom    start    stop
  1       200      265
  5       99       106
  9       275      290
Run Code Online (Sandbox Code Playgroud)

对于范围A中的每一行:

matches <- which((rangesB[,'chrom']  == rangesA[row,'chrom']) &&
                 (rangesB[,'start'] <= rangesA[row, 'start']) &&
                 (rangesB[,'stop'] >= rangesA[row, 'stop']))
Run Code Online (Sandbox Code Playgroud)

我认为必须有一个更好的(并且更好,我的意思是比大范围A和rangeB的大型实例更快)这样做的方式比循环这个结构.有任何想法吗?

r bioinformatics

13
推荐指数
5
解决办法
2万
查看次数

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

我有一个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
查看次数

标签 统计

r ×2

bioinformatics ×1

data.table ×1

dataframe ×1

overlap ×1

range ×1