1

如何在数据中添加一列 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
4

2 回答 2

5

(因为我没有足够的积分来评论)

我想指出,埃里克的回答不会按年区分平均每周价格。因此,如果您对独特的周感兴趣(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)))

并变异和解组。

于 2017-06-08T22:08:23.897 回答
3

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))
于 2017-06-08T21:58:41.483 回答