本着该线程的精神(当键列数不同时合并 data.table),我如何将表 A 中的键列匹配到单个值(来自表或非表),其中 A 中的匹配行是什么时候A 中至少有一列等于该值?
这是一个简短的示例:假设我有表 A:
A <- data.table(b1 = c(0, 1, 1, 1, 1), b2 = c(1, 1, 1, 1, 0), b3 = c(1, 0, 1, 1, 0), mis = FALSE)
setkey(A, b1, b2, b3)
假设我想在 A 的至少一列中匹配的值是 0。所以 A 中的匹配行将是第 1、2 和 5 行。我可以使用以下方法得到这个结果:
A[b1 == 0 | b2 == 0 | b3 == 0, ] # this is not so fast if A is large
b1 b2 b3
1: 0 1 1
2: 1 1 0
3: 1 0 0
是否有可能获得相同的结果但使用更快的连接或合并操作?
我尝试了一些事情,例如:
B <- data.table(v = 0)
A[B, ] # only matches with column b1 in A
或这个:
B <- data.table[b1 = 0, b2 = 0, b2 = 0]
setkey(B, b1, b2, b3)
A[B, ] # matches when all three corresponding columns match
是否有可能想出一个公式来利用二分搜索的速度来实现我正在寻找的结果?
非常感谢你的帮助!