【问题标题】:Merge linear intervals合并线性区间
【发布时间】:2016-07-07 09:58:36
【问题描述】:

我有一个data.frame,它由每个id 的线性间隔组成:

df <- data.frame(id = c(rep("a",3),rep("b",4),rep("d",4)),
                 start = c(3,4,10,5,6,9,12,8,12,15,27),
                 end = c(7,8,12,8,9,13,13,10,15,26,30))

我正在寻找一个高效的函数,它将每个id 的所有相交区间联合起来。对于df,结果将是:

res.df <- data.frame(id = c("a","a","b","d","d","d"),
                     start = c(3,10,5,8,12,27),
                     end = c(8,12,13,10,26,30))

为此,我最终将能够总结每个 id 的所有联合间隔以获得它们的组合长度:

sapply(unique(res.df$id), function(x) sum(res.df$end[which(res.df$id == x)]-res.df$start[which(res.df$id == x)]+1))

【问题讨论】:

标签: r intervals intersect iranges


【解决方案1】:
#source("https://bioconductor.org/biocLite.R")
#biocLite("IRanges")
library(IRanges)
df1 <- as(df, "RangedData")

as.data.frame(reduce(df1, by = "id", min.gapwidth = 0.5))

#  space start end width id
#1     1     3   8     6  a
#2     1    10  12     3  a
#3     1     5  13     9  b
#4     1     8  10     3  d
#5     1    12  26    15  d
#6     1    27  30     4  d

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2017-09-07
    • 1970-01-01
    • 2013-06-11
    • 2018-08-26
    相关资源
    最近更新 更多