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

如何使用向量对R数据框行求和并生成指定名称的新列

R实现指定变量行求和并自动生成新列名的方案

核心思路

不用手动写for循环逐行计算,直接用R内置的rowSums()函数完成向量化的行求和运算,同时根据输入变量名的规则自动拼接生成新列名,运算效率远高于手写循环,也能自动处理缺失值场景。

步骤实现

1. 构造示例数据(可直接跳过替换为自己的真实数据)

# 构造示例数据框
df <- data.frame(
  Name = c("r1", "r2", "r3", "r4"),
  A_12 = c(1,2,5,7),
  B_12 = c(5,4,15,8),
  C_12 = c(12,7,16,0),
  D_12 = c(21,10,9,7),
  E_12 = c(15,9,6,18)
)
# 给定的求和变量向量
vector_1 <- c("A_12","B_12","C_12")
vector_2 <- c("B_12","C_12","D_12","E_12")

2. Base R 实现(无需安装额外包)

封装通用函数,自动处理列名生成和求和逻辑,支持任意符合前缀_后缀命名规则的变量向量:

add_sum_col <- function(input_df, var_vector) {
  # 拆分变量名提取前缀和公共后缀
  name_splits <- strsplit(var_vector, "_")
  col_prefix <- paste(sapply(name_splits, function(x) x[1]), collapse = "")
  col_suffix <- name_splits[[1]][2]
  new_col <- paste0(col_prefix, "_", col_suffix)
  # 行求和,na.rm=TRUE自动跳过缺失值避免结果为NA
  input_df[[new_col]] <- rowSums(input_df[, var_vector], na.rm = TRUE)
  return(input_df)
}

# 调用函数生成结果
new_data <- add_sum_col(df, vector_1)
new_data <- add_sum_col(new_data, vector_2)

3. Tidyverse 实现(适合批量处理多个求和向量)

如果需要同时处理3个及以上的求和向量,用purrr批量遍历更简洁,减少重复代码:

library(dplyr)
library(purrr)

# 把所有求和向量放入列表统一处理
sum_vecs <- list(vector_1, vector_2)

new_data <- df %>%
  bind_cols(
    map_dfc(sum_vecs, function(vec) {
      name_splits <- strsplit(vec, "_")
      col_prefix <- paste(sapply(name_splits, \(x) x[1]), collapse = "")
      col_suffix <- name_splits[[1]][2]
      tibble(!!paste0(col_prefix, "_", col_suffix) := rowSums(across(all_of(vec)), na.rm = TRUE))
    })
  )

结果验证

运行后得到的new_data和期望结果完全一致:ABC_12为A_12+B_12+C_12的行和,BCDE_12为B_12+C_12+D_12+E_12的行和。如果需要调整列的顺序可以手动调整,或者添加relocate()函数(dplyr包)指定位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:24:03