【发布时间】:2021-01-27 02:21:55
【问题描述】:
我有两个数据框:代码和供应。 代码(如下所示)由四个字段组成:状态、代码类型、代码、代码标题 supply 有 12 列,但其中三列是 state、codetype 和 code
下面是一个例子
state codetype code codetitle
32 15 123456 Something
32 15 123455 Something Else
32 10 123455 Something Else
从那里,我使用以下代码连接项目
supply1<- supply%>%mutate(supply1= paste0(state,codetype,code))
codes1<- codes%>%mutate(codes1= paste0(state,codetype,code))
我的问题是如何找出供应 1 中的状态、代码类型、代码的组合,而不是代码 1。我会使用 excel 和 match 函数来执行此操作,但有 190 万行,超出了 Excel 的容量。
查看了有关 antijoin 的文档。但是,由于没有ID等通用字段,所以有点混乱。
【问题讨论】:
-
听起来您正在寻找“反连接”。
dplyr包中有一个名为anti_join的函数。或者,您可以在刚刚创建的向量上使用setdiff(supply1$supply1, codes1$codes1)。 -
@Vincent 最初是正确的 (
anti_join),但如果您仅根据一列进行判断,setdiff将起作用。试试anti_join(supply1, codes1, by = c("state", "codetype", "code"))。在 base R 中使用merge是可行的,尽管它需要一个额外的步骤(和一个临时列)。
标签: r concatenation match anti-join