【问题标题】:lookup using two columns with unique rows in R data.table使用 R data.table 中具有唯一行的两列进行查找
【发布时间】:2014-06-01 19:04:10
【问题描述】:

我想知道是否可以使用两列在 R data.table 中进行查找。这是一个失败的小实验:

x <- data.table(A = c("a", "a", "b", "b", "c", "c"),
                D = c( 1,   2,   1,   2,   4,   5))
DT <- data.table(A = c("a", "a", "b", "b"),
                D = c( 1,   2,   1,   2))
setkey(DT, A, D)

DT[J(x$A, x$D), ]  # Same as below, thanks to ilir, I thought it returns an error previously
DT[J(x$A, x$D), , allow.cartesian=TRUE] 
# Return:
#    A D
# 1: a 1
# 2: a 2
# 3: b 1
# 4: b 2
# 5: c 4 # <- ideally (NA NA) or (c NA)
# 6: c 5 # <- ideally (NA NA) or (c NA)

在这个实验中,DT 中的行是唯一的,但是,两列都有重复的条目。当调用 DT[J(x$A, x$D), ] 时,我想做的是查找表 DT,因此我希望结果只有 DT 中的条目,但是,显然不是这样。

有没有一种有效的方法可以用两列作为键进行查找?

【问题讨论】:

  • 您需要在两个data.tables 上拥有相同的密钥。我确信错误读到了类似的内容。
  • 我要做的就是在 x 中找到不在 DT 中的行的位置。我敢肯定,您可以在 x 中有条目不在 DT 中。我有另一个关于这个的帖子 - stackoverflow.com/questions/23087358/…
  • 您不应该在第一种情况下得到错误。 allow.cartesian 应该只在结果超过 6 行时才起作用 (max(nrow(x), nrow(DT)))。另一个结果也是我所期望的,总是返回键。如果您在 DT 中有第三列,那么最后两行将返回为 NA

标签: r data.table


【解决方案1】:

感谢 ilir,以下代码有效:

x <- data.table(A = c("a", "a", "b", "b", "c", "c"),
                D = c( 1,   2,   1,   2,   4,   5))
DT <- data.table(A = c("a", "a", "b", "b"),
                 D = c( 1,   2,   1,   2))
DT[, aux := 1L]
setkey(DT, A, D)
DT[J(x$A, x$D), ]

inx <- !is.na(DT[J(x$A, x$D), ]$aux)

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多