使用R中的每日数据汇总每周平均值

时间:2017-06-08 21:32:12

标签: r mean lag summarize mutate

如何将一列price.wk.average添加到数据中,使price.wk.average等于上周的平均价格,并将一列price.mo.average添加到数据中,使其等于到上个月的平均价格? price.wk.average在整个星期都是一样的。

 Dates    Price   Demand  Price.wk.average   Price.mo.average
 2010-1-1   x        x
 2010-1-2   x        x
 ......
  2015-1-1  x         x

2 个答案:

答案 0 :(得分:3)

(因为我没有足够的评论点)

我想指出,Eric的回答不会区分平均每周价格。因此,如果您对独特周(2012年第1周!= 2015年第1周)感兴趣,您将需要做额外的工作,以便按照独特的周数进行分组。

df <- data.frame( Dates = c("2010-1-1", "2010-1-2", "2015-01-3"),
                  Price = c(50, 20, 40) )

      Dates Price
1  2010-1-1    50
2  2010-1-2    20
3 2015-01-3    40

为了保持数据框架的整洁,我建议将日期转换为POSIX格式,然后对数据框进行排序:

library(lubridate)
df <- df %>% 
      mutate(Dates = lubridate::parse_date_time(Dates,"ymd")) %>% 
      arrange( Dates )

按独特周分组:

df <- df %>% 
      group_by( yw = paste( year(Dates), week(Dates)))

然后变异并取消组合。

按特殊月份分组:

df <- df %>% 
      group_by( ym = paste( year(Dates), month(Dates)))

并改变和取消组合。

答案 1 :(得分:1)

JKL,

尝试发布可重复的示例。这将使您更容易帮助您。你可以使用dplyr:

library(dplyr)
df <- data.frame(date = seq(as.Date("2017-1-1"),by="day",length.out = 100), price = round(runif(100)*100+50,0))
df <- df %>% 
  group_by(week = week(date)) %>%
  mutate(Price.wk.average = mean(price)) %>%
  ungroup() %>%
  group_by(month = month(date)) %>%
  mutate(Price.mo.average = mean(price))