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

如何使用dplyr对两组列的对应位置元素分别求和

实现方案

以下是两种可适配动态列数的dplyr实现方案,无需手动逐列编写求和逻辑,两组列数为任意相等值都可直接运行:

首先加载所需依赖包:

library(dplyr)
library(purrr)
library(stringr) # 仅自定义列名格式时需要

方法1:按列名特征筛选两组列

如果你的两组列名有统一的区分规则(比如示例里第一组以a开头,第二组以b开头),用这个方法最灵活:

# 第一步:定义两组列的筛选规则,可替换为任意dplyr列选择器
cols_g1 <- starts_with("a") # 第一组列的筛选条件,可换成ends_with、matches、直接写列名列表等
cols_g2 <- starts_with("b") # 第二组列的筛选条件

resultado <- teste %>%
  # 按位置一一对应求和,生成新列
  mutate(!!!map2(
    select(cur_data(), all_of(cols_g1)),
    select(cur_data(), all_of(cols_g2)),
    ~ .x + .y
  ) %>% 
    # 自定义新列的命名规则,可按需修改
    set_names(paste0("a_b", seq_along(.)))) %>%
  # 仅保留生成的结果列,不需要可以删除这行
  select(starts_with("a_b"))

方法2:按列位置拆分

如果你的两组列是按固定顺序排列(比如前N列是第一组,后N列是第二组),可以用这个方法:

# 自动计算单组列数,无需手动写死
group_n <- ncol(teste) / 2

resultado <- teste %>%
  # 两组列按位置一一对应求和,直接生成结果
  transmute(across(1:group_n, .names = "a_b{col}") + across((group_n+1):(2*group_n))) %>%
  # 可选:调整列名格式为a_b1、a_b2的样式,不需要可以删除这行
  rename_with(~ str_replace(., "a_b.*(\\d)$", "a_b\\1"))

两种方法在你给出的示例数据上运行,都可以得到期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:06:04