如何使用dplyr的mutate()与across()批量生成新计算列
使用dplyr内置的across函数的.names参数即可实现,完全满足你提出的两项要求,无需手动逐个指定列名,也不依赖任何弃用功能。
实现代码
library(dplyr) df_iris <- iris %>% mutate(across(matches("\\.(Length|Width)"), ~ .x * 2, .names = "{.col}.2")) # 验证结果 head(df_iris)
参数说明
- 第一个参数
matches("\\.(Length|Width)")沿用你原有的列匹配规则,自动筛选所有名称中包含.Length或.Width的列,就算真实场景有20-30列也不用修改匹配逻辑 - 第二个参数为计算逻辑,这里用简洁的匿名函数写法,和你自定义的double函数效果完全一致
- 核心参数
.names用来定义新列的命名规则:{.col}会自动替换为匹配到的原列名,后缀拼接.2刚好符合你需要的新列名格式
运行后原列会完整保留,同时生成所有符合要求的新列,和你手动逐个定义的输出结果完全一致。
内容的提问来源于stack exchange,提问作者Clarinetist
相关产品推荐
相关产品推荐

