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

如何用dplyr::across批量计算同前缀两列的差值?

使用dplyr的across批量计算分组差值的正确方法

首先,原始数据框定义如下:

zed <- data.frame(
  aAgg = c(5, 10, 15, 20),
  bAgg = c(8, 16, 24, 32),
  aPg = c(6, 9, 11, 24),
  bPg = c(7, 15, 22, 26)
)

需求是批量针对前缀a和b,计算prefixAgg减去prefixPg的差值,生成新列prefixDiff,替代多次调用mutate的繁琐写法。

正确实现代码

利用across结合字符串操作关联对应列,同时通过.names参数指定新列名:

library(dplyr)
library(stringr)

zed <- zed %>%
  mutate(
    across(
      ends_with("Agg"), # 选中所有以Agg结尾的列
      ~ .x - get(str_replace(cur_column(), "Agg", "Pg")), # 匹配对应Pg列并计算差值
      .names = "{str_remove(.col, 'Agg')}Diff" # 生成prefixDiff格式的新列名
    )
  )

代码说明

  • ends_with("Agg"):精准筛选出需要计算差值的*Agg列;
  • cur_column():获取当前处理的列名,通过str_replace将后缀"Agg"替换为"Pg",再用get()取出对应的*Pg列完成减法运算;
  • .names参数:通过字符串模板生成目标列名,去掉原列名的"Agg"后缀后拼接"Diff",直接得到aDiff、bDiff这类符合要求的列名。

运行后得到的zed数据框包含的aDiff和bDiff列,结果与多次调用mutate的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:18:19