R语言如何查找两个dataframe的共同行并移除,基于tidyverse实现
解决方案
使用tidyverse生态中dplyr包的anti_join()函数即可实现需求,该函数的作用就是提取第一个数据框中不存在于第二个数据框中的观测行。
实现代码
按指定列判断共同行(匹配你的示例需求)
你的示例中是按name1列的取值判断是否为共同行,代码如下:
library(tidyverse) # 示例数据(已修正原代码语法错误) df1 <- data.frame(name1 = c("a", "b", "c"), name2 = c("a1","b1","c1"), name3 = c("a2","b2","c2")) df2 <- data.frame(name1 = c("a", "b", "m"), name2 = c("a3","b3", "m1"), name3 = c("a4","b4", "m2")) # 提取df2中独有的行 result <- anti_join(df2, df1, by = "name1")
运行后输出的result和你预期的结果完全一致:
name1 name2 name3 1 m m1 m2
按全列完全匹配判断共同行
如果要求所有列的取值完全相同才判定为共同行,无需指定by参数即可:
result <- anti_join(df2, df1)
补充说明
- 如果需要按多列共同匹配判断共同行,给
by参数传入列名向量即可,比如同时按name1和name2匹配的写法为by = c("name1", "name2") - 不指定
by参数时,函数会自动识别两个数据框的所有同名列作为匹配键
内容的提问来源于stack exchange,提问作者Anh
相关产品推荐
相关产品推荐

