如何基于另一数据集的映射对数据框列进行分组求和?
解决方案
针对你的需求,这里提供两种高效的批量处理方法,解决手动重复编码和动态生成列名的问题:
方法一:基于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
相关产品推荐
相关产品推荐

