在R语言中按列类别聚合利润百分比的实现方法
按公司分组计算利润百分比的R实现
嘿,我完全懂这种基础操作偶尔会卡壳的感觉,别慌,咱们一步步来搞定这个问题。从你的样本数据来看,我猜你大概率是想计算利润占对应年份营收的百分比,当然如果是其他维度的占比(比如各公司利润在行业总利润中的占比),我也会一并给出实现方法。
先确认你的样本数据:
companiesData <- data.frame( fy = c(2010,2011,2012,2010,2011,2012,2010,2011,2012), company = c("Apple","Apple","Apple","Google","Google","Google", "Microsoft","Microsoft","Microsoft"), revenue = c(65225,108249,156508,29321,37905,50175, 62484,69943,73723), profit = c(14013,25922,41733,8505,9737,10737, 18760,23150,16978) )
方法1:用tidyverse/dplyr(推荐,代码更直观)
如果你还没安装dplyr包,先执行安装命令:
install.packages("dplyr") library(dplyr)
情况A:计算每年各公司利润占当年营收的百分比
这是最常见的需求,按company分组后,新增一列存储百分比结果:
companiesData_with_pct <- companiesData %>% group_by(company) %>% mutate(profit_to_revenue_pct = round((profit / revenue) * 100, 2)) %>% ungroup() # 查看生成的结果 print(companiesData_with_pct)
这里用round()把结果保留了两位小数,你可以根据需求调整位数。
情况B:计算各公司总利润占自身总营收的百分比
如果是想得到每个公司整体的利润占比,用summarize()代替mutate()即可:
company_overall_pct <- companiesData %>% group_by(company) %>% summarize( total_revenue = sum(revenue), total_profit = sum(profit), overall_profit_pct = round((total_profit / total_revenue) * 100, 2) ) %>% ungroup() print(company_overall_pct)
情况C:计算各公司每年利润占全行业当年总利润的百分比
如果你的需求是看每个公司利润在当年所有公司总利润中的占比,那就按fy(年份)分组:
industry_profit_pct <- companiesData %>% group_by(fy) %>% mutate(profit_to_industry_pct = round((profit / sum(profit)) * 100, 2)) %>% ungroup() print(industry_profit_pct)
方法2:用Base R(无需额外安装包)
如果你不想加载第三方包,用Base R也能轻松实现:
情况A(每年各公司利润占营收百分比):
# 用ave函数快速计算 companiesData$profit_to_revenue_pct <- ave( companiesData$profit, companiesData$company, FUN = function(x) round((x / companiesData$revenue[match(names(x), rownames(companiesData))]) * 100, 2) ) # 或者用拆分-处理-合并的思路,更直观: companies_list <- split(companiesData, companiesData$company) companies_list <- lapply(companies_list, function(df) { df$profit_to_revenue_pct <- round((df$profit / df$revenue)*100, 2) return(df) }) companiesData_with_pct <- do.call(rbind, companies_list)
情况B(公司整体利润占总营收百分比):
company_summary <- aggregate( cbind(revenue, profit) ~ company, data = companiesData, FUN = sum ) company_summary$overall_profit_pct <- round((company_summary$profit / company_summary$revenue)*100, 2) print(company_summary)
这样不管你需要哪种维度的利润百分比,都能直接套用对应的代码啦。
内容的提问来源于stack exchange,提问作者Joke O.
相关产品推荐
相关产品推荐

