如何将一列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
答案 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))