簡體   English   中英

根據R中的位置查找重疊范圍

[英]Find overlapping ranges based on positions in R

我有兩個數據集:

 chr1 25 85
 chr1 2000 3000
 chr2 345 2300

第二個

chr1 34 45 1.2
chr1 100 1000
chr2 456 1500 1.3

這是我想要的輸出,

chr1 25 85 1.2
chr2 345 2300 1.3

下面是我的代碼:

sb <- NULL
rangesC <- NULL
sb$bin <- NULL
for(i in levels(df1$V1)){
   s <- subset(df1, df1$V1 == i)
   sb <- subset(df2, df2$V1 == i)
   for(j in 1:nrow(sb)){
     sb$bin[j] <-s$V4[(s$V2 <= sb$V2[j] & s$V3 >= sb$V3[j])]
  }
 rangesC <- try(rbind(rangesC, sb),silent = TRUE)
}

我得到的錯誤是:

replacement has length zero OR when I use as.character rangesC is empty.

如果位置重疊,我想獲得相應的V4。 怎么了?

data.table包中的foverlaps()函數對兩個data.tables進行重疊連接

library(data.table)
setDT(df1, key = names(df1))
setDT(df2, key = key(df1))
foverlaps(df2, df1, nomatch = 0L)[, -c("i.V2", "i.V3")]
  V1 V2 V3 V4 1: chr1 25 85 1.2 2: chr2 345 2300 1.3 

數據

library(data.table)
df1 <- fread(
  "chr1 25 85
 chr1 2000 3000
 chr2 345 2300", header = FALSE
)

df2 <- fread(
  "chr1 34 45 1.2
chr1 100 1000 
chr2 456 1500 1.3", header = FALSE
)

暫無
暫無

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

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