如何用dplyr批量修改多列值并添加后缀?
批量转换变量并添加后缀的简洁方法
针对你需要批量处理<dbl+lbl>类型列、生成带_t1后缀新列的需求,用dplyr的across()函数就能高效解决,这也是当前dplyr推荐的批量处理语法(替代旧版的mutate_at())。
方法1:匿名函数直接实现
可以直接在across()里写转换逻辑,通过.names参数指定新列的命名规则:
library(dplyr) # 批量处理所有包含"Q26"的列,生成带_t1后缀的新列 samp <- samp %>% mutate(across(contains("Q26"), ~ifelse(.x == 1, 1, 0), .names = "{.col}_t1"))
方法2:简化转换逻辑(更简洁)
因为x == 1会返回布尔值(TRUE/FALSE),转成整数后正好对应1/0,所以可以进一步简化代码:
samp <- samp %>% mutate(across(contains("Q26"), ~as.integer(.x == 1), .names = "{.col}_t1"))
方法3:提前定义函数(逻辑复杂时可复用)
如果后续还要重复使用这个转换逻辑,可以先定义函数,再传入across():
# 定义转换函数 convert_to_t1 <- function(x) { as.integer(x == 1) } # 批量应用函数并添加后缀 samp <- samp %>% mutate(across(contains("Q26"), convert_to_t1, .names = "{.col}_t1"))
关键说明
.names = "{.col}_t1"是核心:{.col}会自动替换为原列名,从而生成Q26_1_1_t1、Q26_2_1_t1这类带后缀的新列。across()支持更多列选择方式,比如starts_with("Q26")、matches("Q26_\\d+_\\d+")(正则匹配),可以根据你的列名格式灵活选择。
内容的提问来源于stack exchange,提问作者Banjo
相关产品推荐
相关产品推荐

