我有一个带参考位置的表,比如x是开头,y是结束。
|---------------------|------------------|
| x | y |
|---------------------|------------------|
| 10 | 35 |
|---------------------|------------------|
| 58 | 89 |
|---------------------|------------------|
然后我有另一个单一位置的表,我的目标是检查第二个表中的任何位置是否在第一个表中,考虑到第二个表中的位置可以在col1和col2之间。< / p>
|---------------------|
| 12 |
|---------------------|
| 27 |
|---------------------|
| 65 |
|---------------------|
我怎样检查这个,因为我不能使用 dplyr 中的任何连接,甚至唯一。
答案 0 :(得分:3)
我们可以使用foverlaps
data.table
library(data.table)
df1 <- data.frame(x = c(10, 58), y = c(35, 89))
df2 <- data.frame(x= c(12, 27, 65), y = c(12, 27, 65))
setDT(df1, key = c('x', 'y'))
setDT(df2, key = c('x', 'y'))
foverlaps(df2, df1, type = "within", which = TRUE)$yid
#[1] 1 1 2
答案 1 :(得分:0)
data.table
的1.9.8版(2016年11月25日CRAN上)介绍了非等联接,可用于代替foverlaps()
:
setDT(df1)[setDT(df2), on = .(x <= z, y >= z), which = TRUE]
[1] 1 1 2 NA
请注意,第二个表格与OP的数据不同,因为添加了第四行,并不匹配任何间隔。
df1 <- data.frame(x = c(10, 58), y = c(35, 89))
df2 <- data.frame(z = c(12, 27, 65, 90))