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

如何使用mutate对同编号后缀的多组变量配对求和?

解决方案:无需循环与paste0的对应列配对求和

核心思路

利用dplyr的across()函数批量处理指定编号的V列,结合列名提取与动态变量匹配,在单次mutate()操作中完成所有V与对应e列的求和,完全规避循环和显式拼接列名的冗余操作。

代码实现

首先加载依赖包并构造示例数据:

library(dplyr)
library(stringr) # 用于提取列名中的数字编号

# 示例数据框
df <- tibble(
  V1 = 1:5,
  V2 = 6:10,
  e1 = 0.1,
  e2 = 0.2
)

定义适配任意n的处理函数:

sum_ve_pairs <- function(df, n) {
  df %>%
    mutate(
      # 遍历V1到Vn的所有列
      across(paste0("V", 1:n),
             # 提取当前V列的编号,匹配对应e列并求和
             ~ .x + !!sym(paste0("e", str_extract(.col, "\\d+"))),
             # 自动生成新列名,格式为sum_V1、sum_V2...
             .names = "sum_{.col}"
      )
    )
}

调用示例

# 处理n=2的场景
sum_ve_pairs(df, 2)

输出结果:

# A tibble: 5 × 6
     V1    V2    e1    e2 sum_V1 sum_V2
  <int> <int> <dbl> <dbl>  <dbl>  <dbl>
1     1     6   0.1   0.2    1.1    6.2
2     2     7   0.1   0.2    2.1    7.2
3     3     8   0.1   0.2    3.1    8.2
4     4     9   0.1   0.2    4.1    9.2
5     5    10   0.1   0.2    5.1   10.2

方案优势

  • 仅需单次mutate()调用,无循环操作,代码简洁高效
  • 通过str_extract()精准提取列名编号,只匹配对应编号的e列,不会生成V1+e2这类无效组合
  • 利用.names参数自动生成规范的新列名,无需手动拼接列名字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:31:02