R按周汇总

时间:2018-04-10 15:01:25

标签: r datetime group-by aggregate

R的新手如果术语关闭,请原谅我。

我有一个数据框

      date           val1   val2 val3         val4
1  2016-01-01     8007.59 128739 1573            0
2  2016-01-02     8526.98 142289 1798            0
3  2016-01-03     7720.77 132418 1433            0
4  2016-01-04     6845.67 123710 1280            0
5  2016-01-05     7176.20 126395 1302            0
6  2016-01-06     6125.98 117223 1148            2
7  2016-01-07     6125.16 109752 1119           30
8  2016-01-08     6869.92 107377 1233           24
9  2016-01-09     7289.16 107644 1326           25
10 2016-01-10     7360.92 124131 1330           21
11 2016-01-11     6697.14 112992 1185           26
12 2016-01-12     6418.59 106102 1116           22
13 2016-01-13     7334.01 118562 1156           21
14 2016-01-14     7845.45 113140 1184           17
15 2016-01-15     7902.26 104892 1207           37
16 2016-01-16     8443.98 114435 1336           37
17 2016-01-17     9010.53 129167 1370           29
18 2016-01-18     9750.08 125191 1467           29
19 2016-01-19     6864.10 101307 1085           11
20 2016-01-20     7519.02  89794 1095           21
21 2016-01-21     8208.62  82585 1039           15
22 2016-01-22     7839.53  78314 1000           26
23 2016-01-23     8104.59  79346 1089           32
24 2016-01-24     9133.29  80510 1135           33
25 2016-01-25     9763.78 103603 1217           21

我想总结每周的所有价值观。这些数据跨越了多年,所以要明确我不希望汇总多年的周数(例如,不是所有的周1都是2周...周52),而是仅仅计算每个周的年份。

在python / pandas中,这将是df.groupby(pd.Grouper(key='date', freq='w')).sum()

谢谢!

1 个答案:

答案 0 :(得分:3)

要按ISO定义周分组,请使用

require(tidyverse)
df %>% 
  group_by(year = year(date), week = week(date)) %>% 
  summarise_if(is.numeric, sum)

要从周日开始按周分组,请使用@ r2evans建议

require(tidyverse)
df %>% 
  group_by(week = format(date, '%Y-%U'))%>% 
  summarise_if(is.numeric, sum)