Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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_Performance_Data.table_Binary Search - Fatal编程技术网

R 如何连接具有多列和多个值的data.table

R 如何连接具有多列和多个值的data.table,r,performance,data.table,binary-search,R,Performance,Data.table,Binary Search,下面是一个例子: DT = data.table(x=1:4, y=6:9, z=3:6) setkey(DT, x, y) 联接列具有多个值: xc = c(1, 2, 4) yc = c(6, 9) DT[J(xc, yc), nomatch=0] x y z 1: 1 6 3 使用J()只返回一行。实际上,我想以%操作员的身份加入 DT[x %in% xc & y %in% yc] x y z 1: 1 6 3 2: 4 9 6 但是在%操作符中使用%会使搜索成为

下面是一个例子:

DT = data.table(x=1:4, y=6:9, z=3:6)
setkey(DT, x, y)
联接列具有多个值:

xc = c(1, 2, 4)
yc = c(6, 9)
DT[J(xc, yc), nomatch=0]
   x y z
1: 1 6 3
使用
J()
只返回一行。实际上,我想以%操作员的身份加入

DT[x %in% xc & y %in% yc]
   x y z
1: 1 6 3
2: 4 9 6
但是在%操作符中使用
%会使搜索成为向量扫描,与二进制搜索相比速度非常慢。为了进行二进制搜索,我构建了连接值的所有可能组合:

xc2 = rep(xc, length(yc))
yc2 = unlist(lapply(yc, rep, length(xc)))
DT[J(xc2, yc2), nomatch=0]
   x y z
1: 1 6 3
2: 4 9 6

但以这种方式构建xc2、yc2会使代码难以阅读。在这种情况下,有没有更好的方法来提高二进制搜索的速度和%
运算符中
%的简单性?

通过回答从DT标记开放式问题中删除此问题。
阿伦评论中的代码DT[CJ(xc,yc),nomatch=0L]将完成这项工作。

我认为您正在寻找交叉连接-这就是功能CJ。尝试
DT[CJ(xc,yc),nomatch=0L]
。请随意将此作为答案发布(如果正确)并接受它。