jkl*_*jkl 1 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
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
(因为我没有足够的积分来评论)
我想指出的是,埃里克的回答不会按年区分平均每周价格。因此,如果您对独特的周(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
Run Code Online (Sandbox Code Playgroud)
为了保持数据框整洁,我建议将日期转换为 POSIX 格式,然后对数据框进行排序:
library(lubridate)
df <- df %>%
mutate(Dates = lubridate::parse_date_time(Dates,"ymd")) %>%
arrange( Dates )
Run Code Online (Sandbox Code Playgroud)
按独特的周分组:
df <- df %>%
group_by( yw = paste( year(Dates), week(Dates)))
Run Code Online (Sandbox Code Playgroud)
然后变异和解组。
按唯一月份分组:
df <- df %>%
group_by( ym = paste( year(Dates), month(Dates)))
Run Code Online (Sandbox Code Playgroud)
并变异和解组。