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

R语言:计算每日各销售人员的销售额占比

解决方法:计算销售人员每日销售额占比

嘿,我看到你的问题啦!首先得提一句,你用cbind()创建的df其实是个矩阵而非数据框,而且Sales列现在是字符类型,这可能是你之前操作失败的原因之一。先帮你把数据结构修正过来,然后给你两种简单的方法计算占比:

第一步:修正数据结构

先把矩阵转换为数据框,并将Sales和day转为数值型:

# 转换为数据框,同时关闭因子自动转换
df <- as.data.frame(df, stringsAsFactors = FALSE)
# 将Sales转为数值型,day转为整数型
df$Sales <- as.numeric(df$Sales)
df$day <- as.integer(df$day)

方法一:使用dplyr包(推荐)

这应该是你提到的dpply的正确写法(是dplyr哦),通过分组计算来实现:

# 先加载dplyr包,如果没安装先执行 install.packages("dplyr")
library(dplyr)

df_with_percent <- df %>%
  # 按天分组
  group_by(day) %>%
  # 新增列:销售额占当日总和的百分比(乘以100转为百分比格式,保留2位小数)
  mutate(Sales_Percent = round(Sales / sum(Sales) * 100, 2)) %>%
  # 取消分组(可选,后续操作更灵活)
  ungroup()

# 查看结果
print(df_with_percent)

执行后你会看到新增的Sales_Percent列,比如第1天Chris的占比就是32/(32+54+65+43)*100≈16.49%,和你预期的一致。

方法二:使用Base R(无需额外包)

如果不想加载第三方包,可以用ave()函数实现相同效果:

# 直接新增百分比列
df$Sales_Percent <- with(df, round(Sales / ave(Sales, day, FUN = sum) * 100, 2))

# 查看结果
print(df)

这里ave(Sales, day, FUN = sum)会按天计算每日的总销售额,然后用每个销售人员的销售额除以对应日期的总和,再转为百分比。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:21:59