找到表中最大的连续区域

时间:2014-04-10 19:22:05

标签: r dataframe data.table

我试图在文件中找到基于两列的连续行的区域。我想找到最大的连续值范围。如果第4列(V3)紧接在第3行(V2)的第二行值之前,则将输出写入连续值的最长范围。

输入看起来像这样。输入:

> x
   grp   V1   V2  V3  V4  V5 V6 
1:   1 DOG.1 142 144 132 134  0  
2:   2 DOG.1 313 315 303 305  0  
3:   3 DOG.1 316 318 306 308  0  
4:   4 DOG.1 319 321 309 311  0 
5:   5 DOG.1 322 324 312 314  0

输出应如下所示:

      out.name  in  out  
[1,] "DOG.1" "313" "324"

注意x [1,]是如何被移除的以及输出如何从x [2,3]开始并以x [5,4]结束。所有这些值都是连续的。

1 个答案:

答案 0 :(得分:2)

一种显而易见的方法是取tail(x$V2, -1L) - head(x$V3, -1L)并获得与最大连续1对应的开始和结束索引。但是我会在这里跳过它(并留给其他人),因为我想在IRanges package的帮助下展示如何做到这一点:

require(data.table)
require(IRanges) ## Bioconductor package

x.ir = reduce(IRanges(x$V2, x$V3))
max.idx = which.max(width(x.ir))

ans = data.table(out.name = "DOG.1", 
                 in = start(x.ir)[max.idx], 
                 out = end(x.ir)[max.idx])

#    out.name bla out
# 1:    DOG.1 313 324