R 重叠段

R 重叠段,r,dataframe,segments,R,Dataframe,Segments,我正在使用一个数据框,它看起来像这样 这两列表示块的开始和结束。我需要知道在从0到23110906的每个位置上有多少这样的块。有时区块重叠,有时可能有一个区域根本没有区块覆盖。这就像R中的片段。但我不需要可视化,我只需要一种方法来快速找到每个位置的块数。有一种简单的方法吗?如果你真的想要每个位置的计数——所有23110906个位置——这个代码会告诉你 countChunks = function(i) sum(dfrm$n7 <= i & i <= dfrm$n8) coun

我正在使用一个数据框,它看起来像这样


这两列表示块的开始和结束。我需要知道在从0到23110906的每个位置上有多少这样的块。有时区块重叠,有时可能有一个区域根本没有区块覆盖。这就像R中的片段。但我不需要可视化,我只需要一种方法来快速找到每个位置的块数。有一种简单的方法吗?

如果你真的想要每个位置的计数——所有23110906个位置——这个代码会告诉你

countChunks = function(i) sum(dfrm$n7 <= i & i <= dfrm$n8)
counts = sapply(1:23110906, countChunks)

countChunks=function(i)sum(dfrm$n7如果您真的想要每个位置(所有23110906个位置)的计数,此代码将告诉您

countChunks = function(i) sum(dfrm$n7 <= i & i <= dfrm$n8)
counts = sapply(1:23110906, countChunks)

countChunks=function(i)sum(dfrm$n7调用您要查找的数据结构,它是一种排序的二叉树,包含(猜猜是什么)间隔,每个间隔通常有开始和结束位置

我从未使用间隔树来存储您需要的点,但我想您可以将间隔定义为
interval.start=interval.end

构建树需要线性时间,查询数据帧的间隔需要对数时间,这比pteetor的二次时间方法快得多


Bioconductor的R软件包可能会对您有所帮助。我会先尝试函数
findOverlaps()
,然后尝试结果
table()
。我邀请您阅读文档,看看它是否适合您的特定需要。

您正在寻找的数据结构被调用,这是一种包含(猜猜看)的排序二叉树间隔,每个间隔通常有开始和结束位置

我从未使用间隔树来存储您需要的点,但我想您可以将间隔定义为
interval.start=interval.end

构建树需要线性时间,查询数据帧的间隔需要对数时间,这比pteetor的二次时间方法快得多

Bioconductor的R软件包可能会对您有所帮助。我会尝试函数
findOverlaps()
,然后
table()
查看结果。我邀请您阅读文档,看看它是否适合您的特定需要。

以下是一些数据

m = matrix(c(10, 20, 25, 30), 2)
一个概念是覆盖率()

这是一种紧凑的运行长度编码;在第i个位置进行查询

> cvg[22]
integer-Rle of length 1 with 1 run
  Lengths: 1
  Values : 2
> runValue(cvg[22])
[1] 2
在Rle上做数学

> cvg > 1
logical-Rle of length 30 with 3 runs
  Lengths:    19     6     5
  Values : FALSE  TRUE FALSE
或强制为整数向量

> as(cvg, "integer")
 [1] 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 1
这个

也会相当快

注意它们之间的细微差别,从末端是否包含在范围内(IRanges:yes;tablate:no)这一概念上的差异。如果这些实际上是基因组坐标,那么就应该考虑seqname(染色体)和strand。

以下是一些数据

m = matrix(c(10, 20, 25, 30), 2)
一个概念是覆盖率()

这是一种紧凑的运行长度编码;在第i个位置进行查询

> cvg[22]
integer-Rle of length 1 with 1 run
  Lengths: 1
  Values : 2
> runValue(cvg[22])
[1] 2
在Rle上做数学

> cvg > 1
logical-Rle of length 30 with 3 runs
  Lengths:    19     6     5
  Values : FALSE  TRUE FALSE
或强制为整数向量

> as(cvg, "integer")
 [1] 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 1
这个

也会相当快


注意这些之间的细微差异,从是否包括范围内的末端(IRanges:yes;tablate:no)的概念上的差异。如果这些实际上是基因组坐标,则是解释seqname(染色体)的地方和strand.

我取了那个矩阵,检查了重叠,其中只有五个间隔有重叠,没有一个间隔有2个重叠,假设它们是按起始位置排序的:

> sum( mat[1:28,2] > mat[2:29,1] )
[1] 5
> sum( mat[1:27,2] > mat[3:29,1] )
[1] 0
那么他们是哪一个呢

> which( mat[1:28,2] > mat[2:29,1] )
[1] 19 21 23 25 28
因此,创建一个2300万项长的向量似乎相当浪费机器资源和时间,简单地构建一个函数来计算任何特定位置所处的间隔数要容易得多:

 fchunk <- function(pos) {sum( mat[ , 1] <= pos & mat[,2] >= pos)}
#--------
> fchunk(16675330)
[1] 2
> fchunk(16675329)
[1] 1

我采用该矩阵并检查重叠,其中只有五个间隔有重叠,没有一个间隔有2个重叠,假设它们是按起始位置排序的:

> sum( mat[1:28,2] > mat[2:29,1] )
[1] 5
> sum( mat[1:27,2] > mat[3:29,1] )
[1] 0
那么他们是哪一个呢

> which( mat[1:28,2] > mat[2:29,1] )
[1] 19 21 23 25 28
因此,创建一个2300万项长的向量似乎相当浪费机器资源和时间,简单地构建一个函数来计算任何特定位置所处的间隔数要容易得多:

 fchunk <- function(pos) {sum( mat[ , 1] <= pos & mat[,2] >= pos)}
#--------
> fchunk(16675330)
[1] 2
> fchunk(16675329)
[1] 1

你真的想知道每个位置的计数——所有23110906个位置?或者只是在你选择的某个特定位置?你真的想知道每个位置的计数——所有23110906个位置?或者只是在你选择的某个特定位置?有一些吗[实现区间树的包,我将如何在数据上使用它?是否有一些[实现区间树的包,我将如何在数据上使用它?是否有可能并行化的方法?是否有可能并行化的方法?