簡體   English   中英

在R中找到重疊范圍的索引

[英]find indices of overlapping ranges in R

我的框架看起來像這樣

4 8
6 9
1 2
5 7
10 14
3 9

其中第一個顏色是小節的開始,另一個顏色是小節的結束。 現在,我想返回部分與特定行重疊的那些行的索引。 示例將在第1行。索引將為2,4,6-因為它們部分重疊。 我需要經常進行比較,因此有效的解決方案將是一個很好的選擇

請注意,我不僅在尋找部分重疊,而且也在尋找完全重疊(3 9)..

這是使用data.table包中的foverlaps()函數的可能解決方案。

設置列名稱並選擇行索引:

library(data.table)
cols <- c("start", "end")
indx <- 1L

將您的數據轉換為data.table對象,設置列名,並將特定行與其余數據分開,然后對其進行鍵控(這是必不可少的步驟-檢查?foverlaps以獲取更多信息)。

setnames(setDT(df), cols)
temp <- setkeyv(df[indx], cols)

運行foverlaps功能。 您可以在type參數中選擇所需的重疊type

foverlaps(df[-indx], temp, which=TRUE, 
          type="any", nomatch=0L)$xid + 1 
## [1] 2 4 6

您可以使用“ IRanges”包:

library(IRanges)

findOverlaps(IRanges(DF$V1, DF$V2), IRanges(DF$V1[1], DF$V2[1]))@queryHits
#[1] 1 2 4 6

或一次生成所有重疊,然后再生成子集:

overls = findOverlaps(IRanges(DF$V1, DF$V2), ignoreSelf = TRUE)
split(subjectHits(overls), queryHits(overls))

subjectHits(overls)[queryHits(overls) == 1]
#[1] 2 4 6

“ DF”:

DF = structure(list(V1 = c(4L, 6L, 1L, 5L, 10L, 3L), V2 = c(8L, 9L, 
2L, 7L, 14L, 9L)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
-6L))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM