【问题标题】:Histogram-like summary for interval data区间数据的直方图摘要
【发布时间】:2015-06-22 11:29:05
【问题描述】:

如何在 R 中获得类似于直方图的区间数据摘要?

我的 MWE 数据有四个区间。

interval  range
Int1      2-7
Int2      10-14
Int3      12-18
Int4      25-28

我想要一个类似直方图的函数,它计算间隔 Int1-Int4 如何跨越固定大小的 bin 的范围。 函数输出应如下所示:

bin     count  which
[0-4]   1      Int1
[5-9]   1      Int1
[10-14] 2      Int2 and Int3
[15-19] 1      Int3
[20-24] 0      None
[25-29] 1      Int4

这里的范围是 [minfloor(Int1, Int2, Int3, Int40), maxceil(Int1, Int2, Int3, Int4)) = [0,30) 并且有六个大小 = 5 的 bin。

我将非常感谢任何指向实现我想要的功能的 R 包或函数的指针。

更新:

到目前为止,我有一个来自 IRanges 包的解决方案,它使用称为 NCList 的快速数据结构,根据用户,它比间隔搜索树更快。

> library(IRanges)
> subject <- IRanges(c(2,10,12,25), c(7,14,18,28))
> query <- IRanges(c(0,5,10,15,20,25), c(4,9,14,19,24,29))
> countOverlaps(query, subject)
[1] 1 1 2 1 0 1

但我仍然无法获得重叠的范围。如果我通过会更新。

【问题讨论】:

  • 你试过table吗?
  • 我尝试了 table,但无法超越查询每个范围端点的简单实现,即如果 j>k 和 istackoverflow.com/questions/4446112/…)
  • 您的预期输出是否基于输入示例?我会尝试cutbreaks
  • 我如何让'cut'在间隔上工作?我的印象是“剪切”适用于向量。 (抱歉格式不好。)

标签: r statistics histogram


【解决方案1】:

使用IRanges,您应该使用findOverlapsmergeByOverlaps 而不是countOverlaps。默认情况下,它不会返回 no matches

我会把它留给你。相反,将显示使用来自data.table 包的foverlaps() 的替代方法:

require(data.table)
subject <- data.table(interval = paste("int", 1:4, sep=""), 
                      start = c(2,10,12,25), 
                      end = c(7,14,18,28))
query <- data.table(start = c(0,5,10,15,20,25), 
                    end = c(4,9,14,19,24,29))

setkey(subject, start, end)
ans = foverlaps(query, subject, type="any")
ans[, .(count = sum(!is.na(start)), 
        which = paste(interval, collapse=", ")), 
     by = .(i.start, i.end)]

#    i.start i.end count      which
# 1:       0     4     1       int1
# 2:       5     9     1       int1
# 3:      10    14     2 int2, int3
# 4:      15    19     1       int3
# 5:      20    24     0         NA
# 6:      25    29     1       int4

【讨论】:

  • 任何关于 foverlaps 速度的 cmets。范围? foverlaps 是否使用像 NCList 这样的特殊数据结构/算法?
猜你喜欢
  • 2022-11-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2021-11-20
  • 2017-06-20
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多