使用R data.table批量比较同后缀列并生成标识的最优方案问询
解决方案
实现思路
先批量提取所有符合x_后缀/y_后缀命名规则的公共后缀,再通过动态赋值一次性生成所有比较列,完全不需要手动逐个编写判断条件。
完整代码(符合apply类函数要求)
library(data.table) # 构造示例数据 x <- data.table(x_abc="A1", y_abc="A1", x_pqr="A1", y_pqr="B1") # 1. 提取所有需要比较的变量对的公共后缀 all_cols <- names(x) x_prefix_cols <- all_cols[grepl("^x_", all_cols)] common_suffix <- gsub("^x_", "", x_prefix_cols) # 过滤掉对应y_前缀列不存在的后缀,避免运行报错 common_suffix <- common_suffix[paste0("y_", common_suffix) %in% all_cols] # 2. 批量生成Y/N标识列 x[, (common_suffix) := lapply(common_suffix, function(suf) { ifelse(.SD[[paste0("x_", suf)]] == .SD[[paste0("y_", suf)]], "Y", "N") })]
可选高性能实现(超大数据量场景)
如果处理百万行级以上的大表,可以用set函数实现更低开销的修改,性能优于上述lapply方案:
for (suf in common_suffix) { set(x, j = suf, value = ifelse(x[[paste0("x_", suf)]] == x[[paste0("y_", suf)]], "Y", "N") ) }
效果说明
运行完上述代码后,x会自动新增abc、pqr两列,值分别为Y、N,和手动编写的逻辑输出完全一致。后续新增其他符合命名规则的变量对时,无需修改代码即可自动适配。
内容的提问来源于stack exchange,提问作者R007
相关产品推荐
相关产品推荐

