You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dplyr的across中通过列名子串生成指定格式新列名?

解决方法

你遇到的问题是.names参数中的gsub没有正确处理列名占位符{.col}——你直接对字符串"{.col}"应用了替换操作,而非实际的列名。以下是两种优雅的适配任意列数的解决方案:

方法1:简洁Lambda表达式写法

library(dplyr)

df <- tibble(
  x = c(5, 5),
  Column_1 = c(0.5, 0.5),
  Column_2 = c(0.75, 0.75)
)

df <- mutate(df,
  across(starts_with("Column_"),
         ~ .x * x,
         .names = ~ gsub("Column_", "ABC_", .x)
         )
)

方法2:可读性更强的命名函数写法

df <- mutate(df,
  across(starts_with("Column_"),
         function(col_value) col_value * x,
         .names = function(col_name) gsub("Column_", "ABC_", col_name)
         )
)

最终输出结果

执行代码后会得到你期望的数据框:

xColumn_1Column_2ABC_1ABC_2
50.50.752.53.75
50.50.752.53.75

关键说明

  • 原代码错误核心:paste0("ABC", gsub("Column_", "", "{.col}"))仅对字面字符串"{.col}"做了替换拼接,未关联到实际的列名(如Column_1)。
  • 上述方案通过在.names中传入函数,直接对每个匹配的列名进行前缀替换,自动适配任意数量的Column_*列,完全无需硬编码数字。

内容的提问来源于stack exchange,提问作者snowman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:05:20