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

在R中对数据框列的迭代组合应用自定义求和函数

自定义R函数实现按列组合逐行求和

没问题,我帮你写一个完全符合需求的自定义函数,下面一步步来:

函数思路

  • 首先区分数据框里的描述列和数值列(v1到v20这类0/1列)
  • 根据你传入的分组参数(比如3),把数值列分成若干连续的组
  • 对每组的列逐行求和,生成以组内第一列名称加s结尾的新列(比如v1-v3的和叫v1s)
  • 最后把原描述列和所有新生成的求和列合并成结果数据框

完整函数代码

sum_col_groups <- function(df, group_size, desc_col = 1) {
  # 提取描述列
  desc_data <- df[, desc_col, drop = FALSE]
  
  # 提取数值列(排除描述列)
  value_cols <- df[, -desc_col, drop = FALSE]
  
  # 计算分组数量
  num_groups <- ceiling(ncol(value_cols) / group_size)
  
  # 初始化存储结果的列表
  sum_results <- list()
  
  # 循环处理每个分组
  for (i in 1:num_groups) {
    # 确定当前分组的列索引范围
    start_col <- (i - 1) * group_size + 1
    end_col <- min(i * group_size, ncol(value_cols))
    
    # 提取当前分组的列
    current_group <- value_cols[, start_col:end_col, drop = FALSE]
    
    # 逐行求和
    group_sum <- rowSums(current_group)
    
    # 生成新列名(用分组第一列的名字加"s")
    new_colname <- paste0(colnames(current_group)[1], "s")
    
    # 把结果存入列表
    sum_results[[new_colname]] <- group_sum
  }
  
  # 合并描述列和所有求和列
  result_df <- cbind(desc_data, as.data.frame(sum_results))
  
  return(result_df)
}

用法演示

先创建一个测试数据框,包含1个描述列和20个0/1列:

# 生成测试数据
set.seed(123) # 固定随机种子,结果可复现
test_df <- data.frame(
  desc = paste0("item", 1:5),
  matrix(sample(c(0,1), 5*20, replace = TRUE), nrow = 5)
)
colnames(test_df)[2:21] <- paste0("v", 1:20)

# 调用函数,分组大小设为3
result <- sum_col_groups(test_df, group_size = 3)

# 查看结果
print(result)

运行后你会看到,结果里保留了desc列,同时新增了v1s(v1+v2+v3的和)、v4s(v4+v5+v6的和)...最后一组因为20除以3余2,所以v19s是v19+v20的和,完全符合你的需求!

额外说明

  • 如果你的描述列不是第一列,可以通过desc_col参数指定列的位置或名称,比如desc_col = "my_desc_col"
  • 数值列不需要严格叫v1到v20,只要是连续的数值列(除了描述列)都可以处理
  • 分组大小可以任意调整,比如设为4的话,就会每4列一组求和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:48:29