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

如何基于另一数据集的映射对数据框列进行分组求和?

解决方案

针对你的需求,这里提供两种高效的批量处理方法,解决手动重复编码和动态生成列名的问题:

方法一:基于rowwise + c_across(与你的初始思路衔接)

先从df_groups中构建分组-列名的命名列表,再通过动态语法批量生成求和列:

library(dplyr)
library(purrr)

# 构建分组映射的命名列表:键为组名,值为对应列名向量
group_col_map <- df_groups %>%
  group_split(group) %>%
  set_names(map(., ~ first(.x$group))) %>%
  map(~ .x$cols)

# 批量按组计算行和
df_result <- df_raw %>%
  rowwise() %>%
  transmute(
    !!!imap(group_col_map, ~ sum(c_across(all_of(.x))))
  )

方法二:基于rowSums(更高效,适合大样本)

如果数据集较大(比如100列),rowSums的向量化操作比rowwise更快:

library(dplyr)
library(purrr)

# 同样先构建分组映射列表
group_col_map <- df_groups %>%
  group_split(group) %>%
  set_names(map(., ~ first(.x$group))) %>%
  map(~ .x$cols)

# 批量计算每组的行和并合并结果
df_result <- map_dfc(group_col_map, ~ rowSums(select(df_raw, all_of(.x))))

说明

  • 两种方法都会自动将df_groups中的group值作为结果数据框的列名,解决第一个问题;
  • 通过构建分组映射列表并结合map/!!!动态语法,无需为30个分组重复编写求和代码,解决第二个问题;
  • 方法二的执行效率更高,推荐用于列数较多的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:45:48