R语言如何一次性批量转换多个相同前缀的变量并生成新变量
最优简洁实现方案(基于dplyr的across函数)
你可以用dplyr内置的批量列处理函数across()实现需求,不需要手动逐个罗列变量,代码如下:
library(dplyr) # 自定义函数保持不变 fctdmat01 <- function(x) {factor(cut(x, breaks = c(-Inf, 2.65, +Inf), labels = c("no", "yes")))} deppar <- deppar %>% mutate( # 匹配所有dmat.开头的列,应用fctdmat01函数 across(starts_with("dmat."), .fns = fctdmat01, # 定义新列命名规则:替换原列名前缀即可,和你手写的输出列名完全一致 .names = "{gsub('dmat', 'dmat01', col)}") )
代码说明
starts_with("dmat.")会自动选中所有以dmat.为前缀的列,后续新增同前缀变量也会自动纳入处理,不用修改代码.names参数里的{col}会自动替换为匹配到的原列名,通过简单的字符串替换就能生成符合要求的新列名
旧版dplyr兼容方案
如果你使用的是1.0版本以下的dplyr,可以用已废弃但仍兼容的mutate_at实现:
deppar <- deppar %>% mutate_at(vars(starts_with("dmat.")), .funs = fctdmat01, .name = "dmat01.{sub('dmat.', '', col)}")
内容的提问来源于stack exchange,提问作者Myriam
相关产品推荐
相关产品推荐

