[英]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.