1

I'm borrowing the reproducible example given here:

Aggregate daily level data to weekly level in R

since it's pretty much close to what I want to do.

   Interval    value

1  2012-06-10   552
2  2012-06-11  4850
3  2012-06-12  4642
4  2012-06-13  4132
5  2012-06-14  4190
6  2012-06-15  4186
7  2012-06-16  1139
8  2012-06-17   490
9  2012-06-18  5156
10 2012-06-19  4430
11 2012-06-20  4447
12 2012-06-21  4256
13 2012-06-22  3856
14 2012-06-23  1163
15 2012-06-24   564
16 2012-06-25  4866
17 2012-06-26  4421
18 2012-06-27  4206
19 2012-06-28  4272
20 2012-06-29  3993
21 2012-06-30  1211
22 2012-07-01   698
23 2012-07-02  5770
24 2012-07-03  5103
25 2012-07-04   775
26 2012-07-05  5140
27 2012-07-06  4868
28 2012-07-07  1225
29 2012-07-08   671
30 2012-07-09  5726
31 2012-07-10  5176

In his question, he asks to aggregate on weekly intervals, what I'd like to do is aggregate on a "day of the week basis".

So I'd like to have a table similar to that one, adding the values of all the same day of the week:

    Day of the week      value
1    "Sunday"            60000
2    "Monday"            50000
3    "Tuesday"           60000
4    "Wednesday"         50000
5    "Thursday"          60000
6    "Friday"            50000
7    "Saturday"          60000
0livier1O1
  • 53
  • 1
  • 9

4 Answers4

1

We can group them by weekly intervals using weekdays :

library(dplyr)
df %>%
   group_by(Day_Of_The_Week = weekdays(as.Date(Interval))) %>%
   summarise(value = sum(value))


# Day_Of_The_Week value
#            <chr> <int>
#1          Friday 16903
#2          Monday 26368
#3        Saturday  4738
#4          Sunday  2975
#5        Thursday 17858
#6         Tuesday 23772
#7       Wednesday 13560
Ronak Shah
  • 377,200
  • 20
  • 156
  • 213
1

You can try:

aggregate(d$value, list(weekdays(as.Date(d$Interval))), sum)
Roman
  • 17,008
  • 3
  • 36
  • 49
0

We can do this with data.table

library(data.table)
setDT(df1)[, .(value = sum(value)), .(Dayofweek = weekdays(as.Date(Interval)))]
#   Dayofweek value
#1:    Sunday  2975
#2:    Monday 26368
#3:   Tuesday 23772
#4: Wednesday 13560
#5:  Thursday 17858
#6:    Friday 16903
#7:  Saturday  4738
akrun
  • 874,273
  • 37
  • 540
  • 662
0

using lubridate https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html

df1$Weekday=wday(arrive,label=TRUE)

library(data.table)
df1=data.table(df1)

df1[,sum(value),Weekday]
Ajay Ohri
  • 3,382
  • 3
  • 30
  • 60