【问题标题】:Converting zoo time series from daily to monthly means将动物园时间序列从每日转换为每月意味着
【发布时间】:2017-08-11 02:14:02
【问题描述】:

我使用动物园创建了一个时间序列。它具有长期(40 年)的每日价值。我可以很容易地绘制它,但我想要的是从这个原始时间序列中创建一个包含月度(平均值)值的时间序列,然后将其绘制为月度值。

我认为包 lubridate 可能是一个不错的选择,也许有一个简单的方法,但我不知道如何。我是 R 的初学者。这里有人提示吗?

【问题讨论】:

    标签: r time-series zoo lubridate


    【解决方案1】:

    您可以使用 xts 包中的apply.monthly()。

    library(xts)
    data(sample_matrix)
    x <- as.xts(sample_matrix, dateFormat = "Date")
    (m <- apply.monthly(x, mean))
    #                Open     High      Low    Close
    # 2007-01-31 50.21140 50.31528 50.12072 50.22791
    # 2007-02-28 50.78427 50.88091 50.69639 50.79533
    # 2007-03-31 49.53185 49.61232 49.40435 49.48246
    # 2007-04-30 49.62687 49.71287 49.53189 49.62978
    # 2007-05-31 48.31942 48.41694 48.18960 48.26699
    # 2007-06-30 47.47717 47.57592 47.38255 47.46899
    

    您可能还想将索引从Date 转换为yearmon,您可以这样做:

    index(m) <- as.yearmon(index(m))
    m
    #              Open     High      Low    Close
    # Jan 2007 50.21140 50.31528 50.12072 50.22791
    # Feb 2007 50.78427 50.88091 50.69639 50.79533
    # Mar 2007 49.53185 49.61232 49.40435 49.48246
    # Apr 2007 49.62687 49.71287 49.53189 49.62978
    # May 2007 48.31942 48.41694 48.18960 48.26699
    # Jun 2007 47.47717 47.57592 47.38255 47.46899
    

    【讨论】:

    • 感谢您的回答!这很有帮助,但只有一个问题,如果我的一些日常数据是 NA(即使它一个月内只有一个),那么它会给我一个 NA 的月平均值.我希望它忽略 NA 并用其他值计算平均值。你知道这是怎么做到的吗?
    • 还有一个问题,你知道如何创建累计月值而不是月平均值吗?谢谢
    • @OscarMolina:将na.rm = TRUE 添加到apply.monthly() 调用以删除缺失值。什么是“累计月值”?
    • 我的意思是总和,但我已经解决了,谢谢你的帮助!!
    • 是的,只需将mean 更改为sum。另请参阅What should I do when someone answers my question。
    【解决方案2】:

    您可以使用aggregate.zoo,如示例所示:

    x2a <- aggregate(x, as.Date(as.yearmon(time(x))), mean)
    

    如果你想坚持zoo。

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 2018-06-23
      • 2021-02-13
      • 1970-01-01
      • 2011-09-15
      • 2018-08-19
      • 2013-04-21
      • 2011-06-17
      相关资源
      最近更新 更多