R语言dplyr如何在mutate的case_when中调用cur_column处理匹配后缀列
R dplyr批量处理配对变量解决方案
问题根因
你之前的写法失效核心是!!属于提前求值的注入操作,代码解析阶段cur_column()还未遍历列,无法拿到当前列名,无法匹配对应的dummy变量。
修正代码
首先修正变量定义的笔误:
# 原写法v()为笔误,改为c(),变量名加引号 vars <- c("var1_scale", "var2_scale")
核心处理代码:
library(dplyr) dt_processed <- dt %>% mutate(across(all_of(vars), ~ { # 函数内部动态获取对应dummy列名 dummy_col <- gsub("scale", "dummy", cur_column()) case_when( .data[[dummy_col]] == 0 ~ 0, .data[[dummy_col]] == 1 ~ .x + 1 ) }))
处理结果
运行后得到的转换后数据如下:
var1_dummy var2_dummy var1_scale var2_scale 1 0 1 0 4 2 1 0 4 0 3 0 0 0 0 4 0 0 0 0 5 0 0 0 0 6 1 1 4 3 7 0 0 0 0 8 0 0 0 0 9 1 1 5 4 10 1 1 5 6
如果需要保留原始scale列不被覆盖,可以在across中添加.names参数指定新列名规则,例如.names = "{col}_adjusted"会生成var1_scale_adjusted这类新列。
内容的提问来源于stack exchange,提问作者broti
相关产品推荐
相关产品推荐

