如何使用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
相关产品推荐
相关产品推荐

