R语言按年份分组计算营收百分比结构的实现方法
R按年份分组计算收入百分比结构实现方案
原代码中prop.table(df$Revenues)的计算逻辑是对全量收入数据求全局占比,没有按年份拆分计算,要实现按年度单独统计各年的百分比结构,可直接用以下两种方案实现,计算结果和原数据框行顺序完全匹配,可直接用于后续图表绘制。
方案1:原生R实现(无需安装额外包)
用base R自带的ave()分组计算函数即可,先修正原代码中残留的冗余文本number of factor,再替换占比计算逻辑:
# 构造测试数据 df<-data.frame( Years = rep(2010:2020,len=22), Stores = rep(c("Store1","Store2","Store3"),22), Revenues = rep(c(200,400,100),22) ) df$Years<-as.factor(df$Years) df$color <- factor(df$Revenues, labels = c("cyan", "green","darkviolet")) # 按年份分组计算单年度内各门店收入占比 df$Pct <- ave(df$Revenues, df$Years, FUN = function(x) prop.table(x))
ave()会自动按指定的Years字段拆分收入数据,对每个年份的收入子集单独执行占比计算,最后按原数据的行顺序拼接结果,不会出现行错位问题。
方案2:dplyr分组实现(代码可读性更高)
如果日常用tidyverse生态的函数,可以用分组mutate实现,逻辑更直观:
library(dplyr) df <- df %>% group_by(Years) %>% # 指定按年份分组 mutate(Pct = prop.table(Revenues)) %>% # 组内计算占比 ungroup() # 取消分组,避免后续操作受分组逻辑影响
结果校验
计算完成后可任意抽取某一年的Pct列求和,结果恒为1,即符合年度百分比结构的计算要求。以测试数据中固定的收入值为例,单年度内三家门店收入总和为700,对应占比分别为:
- Store1:200/700 ≈ 28.57%
- Store2:400/700 ≈ 57.14%
- Store3:100/700 ≈ 14.29%
计算结果可直接传入ggplot2等绘图包绘制堆叠百分比柱状图、饼图等结构类图表。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

