【问题标题】:How to transform dataframe into time series in R?如何将数据帧转换为 R 中的时间序列?
【发布时间】:2016-04-09 12:32:36
【问题描述】:

我有一个名为data 的矩阵存储了以下数据:

     set.seed(8000)
     data <- matrix(sample(20,60,T),5)
     data
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,]   19    9    6    8    7    2    2   10    3     1     6    13
[2,]    7   15    6   19    5    6   17    4   18    17     1     6
[3,]    4    9    8    6   13   16   17    7   13     8    15    18
[4,]   14   15    5    4   19   13   16    6   16    19    11     6
[5,]    5    8    5    3    7   18   12   13   11     8    14    14

我想将其存储为 ts 对象,其中列是 1 月至 12 月中的月份,行是 1991 年至 1995 年。

data
      Jan  Feb   Mar Apr  May  Jun July  Aug  Sep   Oct   Nov   Dec
1991   19    9    6    8    7    2    2   10    3     1     6    13
1992    7   15    6   19    5    6   17    4   18    17     1     6
1993    4    9    8    6   13   16   17    7   13     8    15    18
1994   14   15    5    4   19   13   16    6   16    19    11     6
1995    5    8    5    3    7   18   12   13   11     8    14    14

基本上,如果我的数据以年为行,以月为列存储,我如何将其存储为时间序列对象?我试过这样做:

data <- ts(data,freq=12,start=c(1991,1))

但是,这似乎不起作用,因为我以后无法绘制数据。 这是我收到的错误:

error: cannot plot more than 10 series as "multiple".

任何建议将不胜感激。谢谢!

【问题讨论】:

    标签: r dataframe time-series


    【解决方案1】:

    提示:请包含您收到的警告/错误消息,以阐明“似乎不起作用”的意思。不过,您的示例很好且可重现,但我得到了错误:不能将超过 10 个系列绘制为“多个”。您的问题是将数据保留为矩阵。将上面的最后一行代码替换为:

    data <- ts(as.vector(t(data)),freq=12,start=c(1991,1))
    

    它转置(按行对其进行矢量化),然后在传递给 ts() 之前转换为单个向量。

    【讨论】:

      【解决方案2】:
      data <- sample(20,60,T)
      data <- ts(data,freq=12,start=c(1991,1))
      

      【讨论】:

      • 首先创建一个向量,它确实有效,但我不确定它是否回答了可能需要处理输入矩阵的 OP 问题。
      • @Shen 鉴于我的可重复答案,这很有效。但我从以该矩阵形式给出的数据开始。谢谢你,因为这提供了我需要的想法
      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2022-11-01
      • 2018-02-08
      • 2015-05-16
      相关资源
      最近更新 更多