修改R语言dplyr分组代码,实现CustomersInGroup列求和统计
解决方案
要实现按Area和Customer_Age_Group分组对CustomersInGroup求和,同时保留所有可能的分组组合(无数据的组填充0),可以通过生成全分组组合 + 左连接聚合结果 + 填充缺失值的方式实现,具体代码如下:
示例代码
library(dplyr) library(tidyr) # 假设你的数据集名为df full_group_summary <- df %>% # 生成Area和Customer_Age_Group的所有可能组合 expand(Area, Customer_Age_Group) %>% # 左连接原数据的分组求和结果 left_join( df %>% group_by(Area, Customer_Age_Group) %>% summarise(Total_Customers = sum(CustomersInGroup, na.rm = TRUE), .groups = "drop"), by = c("Area", "Customer_Age_Group") ) %>% # 将无数据分组的求和值替换为0 mutate(Total_Customers = replace_na(Total_Customers, 0))
代码说明
expand(Area, Customer_Age_Group):遍历两个分组变量的所有唯一值,生成完整的分组组合列表,确保不会遗漏任何潜在分组。sum(CustomersInGroup, na.rm = TRUE):对每组的CustomersInGroup求和,na.rm = TRUE用于忽略原数据中该列的缺失值,避免求和结果为NA。left_join(...):将全分组组合与实际聚合结果关联,原数据中不存在的分组会在Total_Customers列生成NA。replace_na(Total_Customers, 0):把NA值替换为0,满足无数据组填充0的需求。
目标输出示例
执行上述代码后,会得到类似如下的结果:
| Area | Customer_Age_Group | Total_Customers |
|---|---|---|
| North | 18-24 | 150 |
| North | 25-34 | 0 |
| South | 18-24 | 200 |
| South | 25-34 | 300 |
内容的提问来源于stack exchange,提问作者JeffWithpetersen
相关产品推荐
相关产品推荐

