【问题标题】:convert dataframe that contains hourly time series to ts object in r将包含每小时时间序列的数据帧转换为 r 中的 ts 对象
【发布时间】:2019-08-13 11:23:12
【问题描述】:

我有以下形式的数据:

   Date                PJMW_MW
1  2002-04-01 01:00:00 4374
2  2002-04-01 02:00:00 4306
3  2002-04-01 03:00:00 4322
4  2002-04-01 04:00:00 4359
5  2002-04-01 05:00:00 4436
6  2002-04-01 06:00:00 4723
7  2002-04-01 07:00:00 5180
8  2002-04-01 08:00:00 5482
9  2002-04-01 09:00:00 5616
10 2002-04-01 10:00:00 5722
...
143206 2018-08-03 00:00:00 5489

数据属于以下类型:

> class(dat)
[1] "data.frame"
> class(dat$Date)
[1] "POSIXct" "POSIXt" 
> class(dat$PJMW_MW)
[1] "numeric"
> typeof(dat$PJMW_MW)
[1] "double"

如何将其转换为时间序列对象,以便在绘制数据时 x 轴是实际日期(而不是从 1 到 143206 的索引)?我还需要进行时间序列分析,如预测、平滑、拟合模型等。

出于这些目的处理此类数据的推荐方法是什么?

【问题讨论】:

    标签: r datetime time-series


    【解决方案1】:

    使用基数 R,您可以使用函数 ts(),在其中指定系列的值以及观察的开始和结束时间,但似乎不适合小时数。

    所以你可以使用函数zoo()(来自库zoo):

    library(zoo)
    
    hourly_ts <- zoo(
      x         = dat$PJMW_MW,
      order.by  = dat$Date,
      frequency = 24
    )
    

    那么如果你plot(hourly_ts)(或使用ggplot)它将有正确的x轴。

    【讨论】:

    • 那么每单位时间的意思是每天?在帮助文档中,它也被表述为“每单位时间”,但我想它们总是意味着每天......
    • ts() 函数中的参数 frequency 不适用于小时。图书馆 zoo 会更适合你。它编辑了我的答案。
    • 谢谢。由于某种原因,r 认为这个时间序列是不规则的......可能是因为 Date 列中有一些 NA 值。有没有办法让它成为一个普通的 ts 对象?还是普通动物园?
    • 我们可以访问完整的数据集吗?一般来说,缺失值不会对时间序列造成问题。是否存在 PJMW 缺失值的行,或者这些行在数据集中不存在?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2021-05-13
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多