You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:14:30