如何自动化比较R数据框中名称相似的列是否相等?
自动化比较带
.x后缀与对应无后缀列的方法 1. 提取配对列名
先筛选出所有带.x后缀的列,再生成对应的无后缀列名:
# 获取所有带.x后缀的列名 x_cols <- grep("\\.x$", colnames(df), value = TRUE) # 生成匹配的无后缀列名 match_cols <- sub("\\.x$", "", x_cols)
2. 批量执行比较
使用mapply批量对比每一列对,返回是否存在不等值:
# 批量比较,返回每对列是否有不等值(忽略NA) compare_results <- mapply(function(x_col, match_col) { any(df[[x_col]] != df[[match_col]], na.rm = TRUE) }, x_cols, match_cols) # 命名结果,方便查看 names(compare_results) <- paste(x_cols, "vs", match_cols) compare_results
运行后会得到清晰的结果,示例输出:
DAY.x vs DAY MONTH.x vs MONTH FALSE TRUE
其中TRUE表示该列对存在不等值,FALSE表示所有值完全匹配。
扩展:查看具体不等的行
如果需要定位哪些行的值不等,可以修改函数返回行索引:
# 返回每对列中值不等的行号 mismatch_rows <- mapply(function(x_col, match_col) { which(df[[x_col]] != df[[match_col]]) }, x_cols, match_cols) mismatch_rows
内容的提问来源于stack exchange,提问作者karuno
相关产品推荐
相关产品推荐

