【问题标题】:summarize weekly average using daily data in R使用 R 中的每日数据汇总每周平均值
【发布时间】:2017-11-10 18:29:09
【问题描述】:

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

【问题讨论】:

  • 嗨@jkl 请考虑接受下面的答案(单击答案左侧的复选标记),一个对您有用的答案。这让社区知道它有效。

标签: r mean lag summarize dplyr


【解决方案1】:

(由于我没有足够的积分来评论)

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

以及变异和取消组合。

【讨论】:

  • 完全正确。我想按天分组..这将解决问题。
【解决方案2】:

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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2015-07-14
    • 2018-01-24
    相关资源
    最近更新 更多