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

如何用dplyr批量计算R语言中多组对应列的差值?

用dplyr自动化计算多组对应列的差值

针对你的需求,这里提供一种基于dplyr的简洁自动化方案,无需手动逐个计算每一组列的差值:

首先是你的示例数据集:

data <- data.frame(
  A.a= c(1,2,3,4,5),
  A.b= c(10,9,8,7,6),
  A.c= c(5,5,5,5,5),
  B.a= c(1,10,100,1000,10000),
  B.b= c(2,20,200,2000,20000),
  B.c= c(3,30,300,3000,30000)
)

核心实现代码

library(dplyr)
library(stringr)

data <- data %>%
  mutate(
    # 选中所有以"B."开头的列
    across(starts_with("B."),
           # 计算当前B列减去对应A列的差值
           ~ .x - get(str_replace(cur_column(), "^B\\.", "A\\.")),
           # 定义新列的命名规则:diff.后缀
           .names = "diff.{str_remove(.col, 'B\\.')}"
    )
  )

代码说明

  • starts_with("B."):精准筛选所有需要计算差值的"B开头"列,适配你百组以上列的场景
  • str_replace(cur_column(), "^B\\.", "A\\."):自动将当前B列的列名替换为对应的A列名,比如把"B.a"转为"A.a"
  • get():根据转换后的列名获取对应A列的数值,实现B列与A列的匹配计算
  • .names:自定义新列的命名格式,生成diff.a、diff.b、diff.c这类清晰的列名

验证结果

运行代码后,查看数据集即可看到新增的差值列:

print(data)

输出示例:

A.a A.b A.c   B.a   B.b   B.c diff.a diff.b diff.c
1   1  10   5     1     2     3      0     -8     -2
2   2   9   5    10    20    30      8     11     25
3   3   8   5   100   200   300     97    192    295
4   4   7   5  1000  2000  3000    996   1993   2995
5   5   6   5 10000 20000 30000   9995   19994   29995

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:36:09