比较r中的两个表

时间:2016-06-20 13:17:51

标签: r data.table dplyr

我有一个带参考位置的表,比如x是开头,y是结束。

|---------------------|------------------|
|           x         |        y         |
|---------------------|------------------|
|          10         |         35       |
|---------------------|------------------|
|          58         |         89       |
|---------------------|------------------|

然后我有另一个单一位置的表,我的目标是检查第二个表中的任何位置是否在第一个表中,考虑到第二个表中的位置可以在col1和col2之间。< / p>

|---------------------|
|          12         |     
|---------------------|
|          27         |       
|---------------------|
|          65         |
|---------------------|

我怎样检查这个,因为我不能使用 dplyr 中的任何连接,甚至唯一

2 个答案:

答案 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))