如何执行“ setdiff”操作使用data.table合并? [英] How can I perform a "setdiff" merge using data.table?

查看:75
本文介绍了如何执行“ setdiff”操作使用data.table合并?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说我有两个表:

library(data.table)
set.seed(1)

tab1 <- data.table(
  let = rep(letters[1:2], each = 3),
  num = rep(1:3, 2),
  val = rnorm(6),
  key = c("let", "num")
)

tab2 <- data.table(
  let = rep(letters[1:2], each = 2),
  num = rep(1:2, 2),
  val = rnorm(4),
  key = c("let", "num")
)

表1:

> tab1
   let num        val
1:   a   1 -0.6264538
2:   a   2  0.1836433
3:   a   3 -0.8356286
4:   b   1  1.5952808
5:   b   2  0.3295078
6:   b   3 -0.8204684

表2:

> tab2
   let num
1:   a   1
2:   a   2
3:   b   1
4:   b   2

有没有一种方法可以合并这些表,这样我就可以在 tab1 中获得所有结果。不在 tab2 中的?:

Is there a way to "merge" these tables such that I get all the results in tab1 that are not in tab2?:

   let num        val
1:   a   3 -0.8356286
2:   b   3 -0.8204684


推荐答案

在这种情况下,它等效于 anti join

In this case, it's equivalent to an anti join:

tab1[!tab2, on=c("let", "num")]

但是 setdiff()只会使每个 let,num 的第一行。此标记为v1.9.8, FR#547

But setdiff() would only the first row for every let,num. This is marked for v1.9.8, FR #547.

这篇关于如何执行“ setdiff”操作使用data.table合并?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆