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

如何用across()等函数批量生成匹配列名规则的新计算列?

批量创建对应差值列的解决方案

当然可以用dplyr的mutate()、across()等函数实现批量创建新列,无需手动逐个定义。以下是针对你的场景的高效实现方式:

核心代码实现

set.seed(123)
library(dplyr)

# 构造示例数据
df <- tibble(x = seq(1:10), bm_a = runif(10), val_a = runif(10), bm_b = runif(10), val_b = runif(10))

# 批量生成rel_*列:rel_后缀 = val_后缀 - bm_后缀
df <- df |>
  mutate(
    across(
      .cols = starts_with("val_"),  # 选中所有以val_开头的列
      .fns = ~ .x - pick(paste0("bm_", sub("val_", "", cur_column()))),  # 计算对应bm列的差值
      .names = "rel_{sub('val_', '', .col)}"  # 定义新列的命名规则
    )
  )

代码说明

  • starts_with("val_"):精准筛选所有以val_为前缀的列,适配任意数量的同类列(比如新增val_c、val_d也能自动识别)
  • sub("val_", "", cur_column()):从当前处理的val_*列名中提取后缀(比如从val_a提取a)
  • pick(paste0("bm_", ...)):根据后缀匹配对应的bm_*列,确保计算的是同一后缀的列对
  • .names参数:通过模板字符串自动生成新列名,格式为rel_+原后缀,保证命名一致性

验证结果

运行后生成的df会包含所有自动创建的rel_a、rel_b(以及后续新增后缀对应的rel_*列),结果和手动逐个定义的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:40:10