【问题标题】:Average sales per weekday with ggplot2ggplot2 平均每个工作日的销售额
【发布时间】:2017-06-10 18:19:53
【问题描述】:

我有一些两年的交易数据,我想在 R 中分析。它具有以下结构:

date                   weekday  salesval
1 2003-10-31           Mi        425.36
2 2003-10-31           Mi       1504.50
3 2003-10-31           Mi        170.14
4 2002-03-12           Mo       -215.80
5 2002-02-08           Mi          0.00
6 2002-04-17           Do        215.80

我想通过使用 ggplot2 图形系统来说明每个工作日的平均总销售额。

我已经尝试过使用stat_summary 函数,但正如您所见,我的方法只计算每个工作日每笔交易的平均销售额。但我想要每个工作日的平均总销售额。

ggplot(data, aes(weekday, salesval)) + 
    stat_summary(fun.y = function(x) { sum(x) / length(x) }, geom = "bar") +
    scale_y_continuous(labels = dollar) +
    ylab("Sales") +
    xlab("Weekday") +
    ggtitle("Average Sales per Weekday")

我知道我的代码有什么问题,但我不知道如何实现我的实际目标。

希望有人可以帮助我。

最好的祝愿, 马库斯

【问题讨论】:

  • 一种更灵活的方法是首先使用专用于该目的的库进行数据聚合,例如 dplyrgroup_by()summarize()),然后使用 ggplot2 进行可视化聚合数据框。
  • @mpjdem 是的,你可能是对的。但是有没有办法用 ggplot2 一步一步地做到这一点?
  • 我不是ggplot2 专家,但您必须在这里进行双重聚合,首先是日期,然后是工作日。汇总函数只采用单个向量,因此任何仅使用 stat_summary 的解决方案我会说充其量是尴尬的。

标签: r ggplot2 weekday


【解决方案1】:

你可以提供一个聚合函数作为数据

ggplot(data = aggregate(df$salesval, list(df$weekday), mean), aes(Group.1, x)) +
     geom_col()

根据样本数据,这将创建这个

【讨论】:

  • 但这并不是我想要的。我需要进行双重聚合,以便反映每个工作日的平均总销售额。您的数字反映了每个工作日每笔交易的平均销售量。我对这个问题特别感兴趣,如果有办法用 ggplot 一步一步解决。
  • 啊,好吧,抱歉。答案是一样的。您可以将双重聚合数据直接提供到 ggplot(data = 参数中。虽然事情会变得有点混乱。我自己的偏好是按照我的意愿传递数据,只是因为我会发现更容易将过程读取为:操作 > 绘图
【解决方案2】:

dplyr

library(dplyr)
df %>% group_by(weekday) %>% summarise(salesval=mean(salesval)) %>% 
  ggplot(aes(weekday, salesval)) + geom_bar(stat='identity')

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多