【发布时间】:2017-03-26 01:16:26
【问题描述】:
考虑以下示例
library(tidyverse)
library(lubridate)
time <- seq(from =ymd("2014-02-24"),to= ymd("2014-03-20"), by="days")
set.seed(123)
values <- sample(seq(from = 20, to = 50, by = 5), size = length(time), replace = TRUE)
df2 <- data_frame(time, values)
df2 <- df2 %>% mutate(day_of_week = wday(time, label = TRUE))
Source: local data frame [25 x 3]
time values day_of_week
<date> <dbl> <fctr>
1 2014-02-24 30 Mon
2 2014-02-25 45 Tues
3 2014-02-26 30 Wed
4 2014-02-27 50 Thurs
5 2014-02-28 50 Fri
6 2014-03-01 20 Sat
7 2014-03-02 35 Sun
8 2014-03-03 50 Mon
9 2014-03-04 35 Tues
10 2014-03-05 35 Wed
我想按周汇总这个数据框。
也就是说,假设我将一周定义为从周一早上开始到周日晚上结束,我们称之为Monday to Monday 循环。 (重要的是,我希望能够选择其他约定,例如周五到周五)。
然后,我只想计算每周values 的平均值。
例如,在上面的示例中,可以计算 2 月 24 日星期一到 3 月 2 日星期日之间values 的平均值,以此类推。
我该怎么做?
【问题讨论】:
-
df2 %>% group_by(week = week(time)) %>% summarise(value = mean(values)),或改用isoweek。 -
@Frank,完成,感谢您的评论
-
如果提到的
week函数 alistaire 不是您想要的,您可以随时对数据进行排序,然后再进行cumsum(day_of_week == "Mon")。但是,如果您没有记录每一天,结果将会中断。 -
哦,是的,你是对的,重复也可能是个麻烦。可以创建一个从 min 到 max date 的辅助表,在那里创建 week var 并合并,但这可能会很麻烦。
-
还有
cut.Date,如果你愿意,可以在周日或周一开始。否则,您可以添加/减去适当的天数并使用任何选项来移动切割点。