在R data.table中使用具有唯一行的两列进行查找
我想知道是否可以使用两列在R data.table中进行查找。下面是一个失败的小实验:在R data.table中使用具有唯一行的两列进行查找,r,data.table,R,Data.table,我想知道是否可以使用两列在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
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)
x得益于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)
x您需要在两个数据表上使用相同的键。我确信错误是这样读的,我想做的就是找到x中不在DT中的行的位置。我相信你可以在x中有一些不在DT中的条目。关于这一点,我有另一篇帖子——在第一种情况下,你不应该出现错误allow.cartesian
应该只在结果超过6行时生效(max(nrow(x),nrow(DT))
)。另一个结果也是我所期望的,总是返回密钥。如果在DT
中有第三列,那么最后两行的第三列将返回为NA
。