如何使用dplyr按州分组客户数据并计算客户占比?
按州分组客户数据并计算占比(使用dplyr)
核心实现思路
通过dplyr的链式操作,依次完成分组→计数→计算占比三个步骤即可达成需求:
- 用
group_by(state)按州对客户数据分组 - 用
summarise()统计每个州的客户总数 - 用
mutate()结合sum()计算单州客户数占总客户数的百分比
你的代码问题分析
你提供的代码存在命名冲突问题:summarise(state = n())将计数结果命名为state,会直接覆盖原有的州名列,导致后续计算和数据读取逻辑混乱,需要把计数列改为其他名称,比如customer_count。
修正后的代码
# 先确保加载dplyr包 library(dplyr) # 按州分组、计数并计算占比 colsolarestates <- ColSolare %>% group_by(state) %>% summarise(customer_count = n()) %>% # 命名计数列,避免覆盖原state字段 mutate(percent = (customer_count / sum(customer_count)) * 100) # 计算占比,sum(customer_count)取总客户数
拓展用法(保留原数据字段)
如果需要在原数据集基础上直接添加占比列,而非生成仅含分组统计的新数据,可以用以下写法:
ColSolare_with_percent <- ColSolare %>% group_by(state) %>% mutate(state_customer_count = n()) %>% # 标记每条数据所属州的客户总数 ungroup() %>% # 取消分组,确保sum计算的是全局总客户数 mutate(percent = (state_customer_count / sum(state_customer_count)) * 100)
内容的提问来源于stack exchange,提问作者Kaushik Patange
相关产品推荐
相关产品推荐

