R语言如何通过循环为两个数据框批量生成dummy虚拟变量
批量生成虚拟变量实现方案
方法1:基础R循环实现
无需额外加载依赖包,直接遍历目标列批量生成,代码如下:
# 提取匹配DF2行名的DF1目标列名 target_cols <- rownames(DF2) for (col in target_cols) { # 取出当前列对应DF2中的中位数 median_val <- DF2[col, "MEDIAN"] # 生成虚拟变量列,自动拼接列名 DF1[[paste0("dummy", col)]] <- as.integer(almost.equal(DF1[[col]], median_val, tolerance = 2)) }
方法2:tidyverse向量化实现
适合熟悉dplyr语法的场景,代码更简洁:
library(dplyr) DF1 <- DF1 %>% mutate(across(all_of(rownames(DF2)), ~ as.integer(almost.equal(.x, DF2[cur_column(), "MEDIAN"], tolerance = 2)), .names = "dummy{.col}"))
注意事项
- 需保证
DF2的行名和DF1中需要处理的列名完全一一对应 - 代码中
tolerance = 2可根据你的近似判定规则自行调整阈值 - 逻辑值转整数的方式
as.integer()比ifelse()运行效率更高,在大样本下优势更明显
内容的提问来源于stack exchange,提问作者Nicolás Rojas U
相关产品推荐
相关产品推荐

