我可以用data.table

时间:2018-10-22 05:30:18

标签: r data.table

说我有2个data.table集,

DT1 <- data.table(x=1L, y=2L, z=3L)
DT2 <- data.table(x=1:3L, y=2:4L, z=3:5L)

B <- DT2[x==1 & y == 2 & z == 3]
identical(DT1, B)  # TRUE

我可以做类似DT2[c(x,y,z) == DT1]的事情并得到结果吗? 假设在有很多条件要比较时,它应该比DT2[x==1 & y == 2 & z == 3]更优雅。请告知。

感谢Akrun&Michael。 我正在寻找的是j中的比较表达式。另一个玩具的例子在这里。

minDT <- data.table(x=1L, y=1L, z=1L) # side-finding:
maxDT <- data.table(x=3L, y=3L, z=3L) # i noticed it would be numeric if not L
aimDT <- data.table(x=1:3, y=1:3, z=1:3) # in this case, the value is integer

我正在尝试是否可以一次全部比较,而不必 aimDT[x>1 & x<3 & y>1 & y<3 & z>1 & z<3],而是像 aimDT[c(x,y,z)> minDT][c(x,y,z)<maxDT]

谢谢。

1 个答案:

答案 0 :(得分:2)

如果我们要比较“ DT2”和“ DT2”的相应列,请使用MapReduce将其与逻辑vector&进行比较设置“ DT2”的行

DT2[DT2[, Reduce(`&`, Map(`==`, .SD, DT1))]]
#    x y z
#1:  1 2 3

或使用setkey设置键,并使用'DT1'值设置子行

setkeyv(DT2, names(DT2))
DT2[DT1]

# or unkeyed, safer against columns being out of order
DT2[DT1, on=names(DT1)]