You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比对两个dataframe的公共列,查找仅在单个表中存在的行

多列匹配查找DataFrame独有条目的实现方法

你提到的dplyr::anti_join本身就支持多列作为匹配条件,只需要在by参数中传入要匹配的列名构成的字符向量即可。

具体实现代码

方法1:dplyr包实现(推荐)

# 加载dplyr包
library(dplyr)

# 按Company_name、Transaction_Code两列匹配,提取dataframe1独有的条目
res <- anti_join(
  x = dataframe1,
  y = dataframe2,
  by = c("Company_name", "Transaction_Code")
)

运行以上代码后得到的res就是你需要的结果,示例中dataframe1的第8条BBB + 3535的条目会保留在结果中。

方法2:基础R实现(无需安装第三方包)

如果你不想加载额外的包,也可以用基础R的语法实现:

# 拼接两列内容作为唯一匹配标识,筛选出dataframe1独有的行
match_key1 <- paste(dataframe1$Company_name, dataframe1$Transaction_Code, sep = "_")
match_key2 <- paste(dataframe2$Company_name, dataframe2$Transaction_Code, sep = "_")
res <- dataframe1[!match_key1 %in% match_key2, ]

注意事项

  • 匹配前请确认两个DataFrame的匹配列数据类型完全一致,比如Transaction_Code如果一个是数值型、一个是字符型,会导致匹配失败,可通过str(dataframe1)、str(dataframe2)查看列类型。
  • 示例中dataframe2的Sum列出现的050如果是数值型会被自动识别为50,但因为你匹配的是前两列,所以不会影响匹配结果。

内容的提问来源于stack exchange,提问作者user000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:06:02