Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R data.table中使用具有唯一行的两列进行查找_R_Data.table - Fatal编程技术网

在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

我想知道是否可以使用两列在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)

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