如何在R中查找两个dataframe多列完全匹配的行?
R 中找出两个数据框完全匹配行的实现方法
现有两个测试数据框:
df1 <- data.frame (name = c("Mike", "Paul", "Paul", "Henry"), age = c(20, 21, 22, 23)) df2 <- data.frame (name = c("Sam", "Paul", "Paul", "Bob"), age = c(26, 30, 22, 23))
需要返回df1中所有列和df2某一行完全一致的记录,以下是两种常用的简洁方案:
方法1:dplyr 方案(最优雅易读)
使用dplyr的semi_join()函数,天然适配该需求:仅返回第一个数据框中与第二个数据框所有同名列完全匹配的行,且不会因为第二个数据框存在重复匹配行,导致结果出现重复冗余。
# 加载dplyr包,属于tidyverse生态 library(dplyr) matched_rows <- semi_join(df1, df2)
运行后返回结果:
name age 1 Paul 22
如果仅需要匹配指定列,可添加by参数指定匹配字段,例如by = "name"代表仅按name列匹配。
方法2:base R 方案(无第三方依赖)
如果不想安装额外包,用base R语法也可以快速实现,逻辑是把每行的所有字段拼接为字符串,再判断是否存在于另一个数据框的拼接结果中:
matched_rows <- df1[do.call(paste, df1) %in% do.call(paste, df2), ]
运行结果和上述方法完全一致。
内容的提问来源于stack exchange,提问作者Pavel Shliaha
相关产品推荐
相关产品推荐

