r - 如何加入具有多列和多个值的 data.table

标签 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()只返回单行。其实我想加入%in%运算符(operator)。
DT[x %in% xc & y %in% yc]
   x y z
1: 1 6 3
2: 4 9 6

但是使用 %in%运算符使搜索成为矢量扫描,与二分搜索相比非常慢。为了进行二分搜索,我构建了连接值的所有可能组合:
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 会使代码难以阅读。有没有更好的方法来获得二分查找的速度和 %in% 的简单性?运营商在这种情况下?

最佳答案

回答以从 DT 标签开放问题中删除此问题。
来自 Arun 评论的代码 DT[CJ(xc,yc), nomatch=0L]会做的工作。

关于r - 如何加入具有多列和多个值的 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608794/

相关文章:

r - 用dplyr创建一个因子变量?

java - Java 中 "x==7"到 1(真)或 0(假)的快速恒定时间评估

performance - Oracle:执行计划:可靠吗?

c++ - x64 性能与 x86 相比

R:匹配 >= 组内其他行的行数

r - 当新列名作为字符向量给出时,将数据分组到 `data.table` 中的好方法

从字符串中删除前两个单词

r - 如何在ggplot2中制作具有锐利过渡的色标

r - 子集和替换 data.table 中的行和列

r - data.table join 然后将一个表中的所有列添加到另一个