如何基于指定列比较两个数据集,提取df1中该列值不同的记录
按指定列对比两个数据框提取差异记录的R实现
以下是两种常用实现方案,可根据使用场景选择:
方案1:dplyr 实现(语法清晰易维护)
适合已经在使用tidyverse生态的场景,代码可读性更高:
library(dplyr) # 场景1:两个数据框行顺序完全对齐,可直接按位置对比 df_diff <- df1[df1$var4 != df2$var4, ] # 场景2:数据框行顺序可能不一致,按唯一主键var1关联后对比(更稳妥) df_diff <- df1 %>% # 仅关联df2的主键和对比列,避免其他列干扰 left_join(df2 %>% select(var1, var4), by = "var1", suffix = c("_df1", "_df2")) %>% # 筛选var4取值不一致的行 filter(var4_df1 != var4_df2) %>% # 还原为df1的原有列结构 select(var1, var2, var3, var4 = var4_df1)
方案2:纯基础R实现(无外部依赖)
不需要安装任何第三方包,直接运行即可:
# 按主键var1匹配df2中对应行的var4值 match_idx <- match(df1$var1, df2$var1) # 筛选出var4取值不同的df1完整记录 df_diff <- df1[df1$var4 != df2$var4[match_idx], ]
运行以上任意一种方案,都可以得到你预期的输出结果:
> print(df_diff) # A tibble: 1 × 4 var1 var2 var3 var4 <dbl> <chr> <chr> <chr> 1 2 peach blue 2021-12-31
内容的提问来源于stack exchange,提问作者Andres Mora
相关产品推荐
相关产品推荐

