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

R语言自定义函数改造:实现任意长度列索引组合求和计算

R代码改造:支持任意长度列索引组合批量求和

现有测试数据

data <- structure(list(group = c(1L, 1L, 1L, 1L, 1L, 1L,1L,1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), col1 = c(9, 
9.05, 7.15, 7.21, 7.34, 8.12, 7.5, 7.84, 7.8, 7.52, 8.84, 6.98, 
6.1, 6.89, 6.5, 7.5, 7.8, 5.5, 6.61, 7.65, 7.68,8.0,9.0), col2 = c(11L, 
11L, 10L, 1L, 3L, 7L, 11L, 11L, 11L, 11L, 4L, 1L, 1L, 1L, 2L, 
2L, 1L, 4L, 8L, 8L, 1L,3L,4L), col3 = c(7L, 11L, 3L, 7L, 11L, 2L, 11L, 
5L, 11L, 11L, 5L, 11L, 11L, 2L, 9L, 9L, 3L, 8L, 11L, 11L, 2L,5L,6L), 
    col4 = c(11L, 11L, 11L, 11L, 6L, 11L, 11L, 11L, 10L, 7L, 
    11L, 2L, 11L, 3L, 11L, 11L, 6L, 11L, 1L, 11L, 11L,13L,12L), col5 = c(11L, 
    1L, 2L, 2L, 11L, 11L, 1L, 10L, 2L, 11L, 1L, 3L, 11L, 11L, 
    8L, 8L, 11L, 11L, 11L, 2L, 9L,4L,5L)), .Names = c("group", "col1", 
"col2", "col3", "col4", "col5"), class = "data.frame", row.names = c(NA, 
-23L))

注:原数据行数标注有误,实际共23行,已修正row.names参数

原有代码(仅支持2列组合求和)

comb <- list(c(2, 4), c(3, 5), c(4, 6))

test.fun <- function(dat) { 
  do.call(rbind, lapply(comb, function(x) {
    SUM <- dat[[x[1]]]+dat[[x[2]]]
    data.frame(NAME = sprintf('Group %s by Group %s', x[1], x[2]),
                SUM)
   
  }))
}

result <- purrr::map_df(split(data, data$group), test.fun, .id = 'Group')

需求说明

需要改造代码,使其支持comb列表中任意长度的列索引组合,例如以下格式的comb参数:

list(c(2, 4, 6), c(3, 5, 6), c(3, 4, 6), c(2, 3), c(3, 5))

改造后实现代码

核心改动两点:

  1. 求和逻辑替换为rowSums(),自动适配任意长度的列选择
  2. 名称生成改为动态拼接所有列索引,不再固定为两个参数
# 支持任意长度组合的测试用comb
comb <- list(c(2, 4, 5), c(3, 5), c(3, 4, 5), c(2, 3), c(2,3,4,5))

test.fun <- function(dat) { 
  do.call(rbind, lapply(comb, function(x) {
    # 用rowSums对选中的任意数量列逐行求和,na.rm可根据需要开启/关闭
    SUM <- rowSums(dat[, x], na.rm = FALSE)
    # 动态拼接所有列索引生成名称
    NAME <- paste0("Group ", paste(x, collapse = " by Group "))
    data.frame(NAME = NAME, SUM = SUM)
  }))
}

result <- purrr::map_df(split(data, data$group), test.fun, .id = 'Group')

效果验证

改造后代码完全兼容原有2列组合的场景,同时支持3列、4列等任意长度的列索引组合,输出结果结构和原有逻辑完全一致,包含Group(分组编号)、NAME(组合名称)、SUM(求和结果)三个字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:18:02