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
相关产品推荐
相关产品推荐

