【问题标题】:Comparing two tables in r比较r中的两个表
【发布时间】:2016-06-20 13:17:50
【问题描述】:

我有一个带有参考位置的表格,比如 x 是起点,y 是终点。

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

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

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

我如何检查这个,因为我不能使用任何来自 dplyrjoins,甚至是 unique

【问题讨论】:

  • 您可以从data.table查看foverlaps
  • @rawr 你说的是哪个表?我不明白你的问题。
  • @akrun 我会检查一下,谢谢!
  • 试试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
  • @akrun 这看起来是个不错的帖子回答。

标签: r data.table dplyr


【解决方案1】:

我们可以从data.table使用foverlaps

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

【讨论】:

    【解决方案2】:

    data.table 的 1.9.8 版(2016 年 11 月 25 日在 CRAN 上)引入了 non-equi 连接,可以使用它来代替 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      相关资源
      最近更新 更多