Convert daily sales into monthly

Hi everyone

I got these daily sales ts, that I want to make monthly:

I got data from 18-01-01 to 20-10-31 with multiple duplicates of the same date since it is split between different customers.

(expenses <- data_frame(
  date=seq(as.Date("2018-01-01"), as.Date("2020-10-31"), by=1),
  Sales=rgamma(length(date), shape = 2, scale = 20)))

expenses %>% group_by(month=floor_date(df$Date, "month")) %>%

So in short what I want is monthly sales data, I'm using a mac with the latest version of R-studio

Thanks for helping :slight_smile:

One way to approach this would be to add a salesMonth column to your data frame using the floor_date function from lubridate. Then you can use dplyr to group by the salesMonth and summarize that variable with sum.

Here's a simple using a data.frame I constructed called dailySales:


dailySales <- data.frame(
  saleDate = as.Date(c("2020-01-10", "2020-01-12", "2020-01-12", "2020-01-15", "2020-02-10", "2020-02-25")),
  saleAmount = c(100, 100, 200, 100, 50, 100)

dailySales <- dailySales %>% 
  mutate(month = floor_date(dailySales$saleDate, "month"))

dailySales %>% 
  group_by(month) %>% 
  summarize(total = sum(saleAmount))

Hi rdr,
Thanks alot for your help, the problem is solved! :smiley: but when make the monthly data into a timeseries and plot it I get this odd looking graph!
can u explain why it plots the straight line above the actual plot?


Best Jakob

1 Like

Jakob -- Post the code for your graph and perhaps someone can help with that.

For me, picking up from above, once I have the monthly totals, I can create a quick bar chart of monthly sales using ggplot():


monthly <- dailySales %>% 
  group_by(month) %>% 
  summarize(total = sum(saleAmount))

ggplot(monthly) + 
  geom_col(aes(x = month, y = total))

Hope this helps.

-- Robert

It does, and thanks a lot Robert, it was really helpful :slight_smile:

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.