【问题标题】:data.table inner join produces error when no match is found找不到匹配项时,data.table 内连接会产生错误
【发布时间】:2017-10-20 10:09:41
【问题描述】:

我正在尝试使用内部连接来连接两个 data.table。可能找不到匹配项,然后我想要一个具有正确列名的空 data.table。

dt1 <- data.table(A = c(1,2),  B = c(1,2))
dt2 <- data.table(A = c(3,4),  D = c(3,4))
setkey(dt1, A)
setkey(dt2, A)
dt1[dt2, nomatch = 0]
Error in xj[i] : invalid subscript type 'list'
merge(dt1, dt2, 
      all.x = F, 
      all.y = F)

Empty data.table (0 rows) of 3 cols: A,B,D

第二种方法给了我想要的答案。但我更喜欢第一种语法,因为它更快。有人知道我如何在不使用 trycatch 语句的情况下解决此错误。

【问题讨论】:

  • 在最新版本的data.table中,您不需要使用setkey,因此您可以将其简化为一行代码:dt1[dt2, on="A", nomatch=0]。阅读data.table page 上的自动索引部分了解更多信息。

标签: r merge data.table


【解决方案1】:

我无法从第一个示例中重现您的错误。我假设您的意思是

dt1[dt2, nomatch = 0]

?

我明白了:

Empty data.table (0 rows) of 3 cols: A,B,D

使用最新版本的 R 和 data.table

【讨论】:

    【解决方案2】:

    我认为这只是一个错字:

    library(data.table)
    dt1 <- data.table(A = c(1,2),  B = c(1,2))
    dt2 <- data.table(A = c(3,4),  D = c(3,4))
    
    setkey(dt1, A)
    setkey(dt2, A)
    dt1[dt2, nomatch = 0] #instead of t1[t2, nomatch = 0]
    Empty data.table (0 rows) of 3 cols: A,B,D
    

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 2012-04-03
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 2021-01-07
      • 2013-05-21
      • 2020-10-13
      • 2013-12-23
      相关资源
      最近更新 更多