如何将数据帧转换为时间序列?

时间:2019-06-05 17:41:25

标签: r dataframe time-series

对不起,我知道这个问题已经问过很多次了,但是在将数据帧转换为时间序列方面却遇到了问题。

这是我的数据框(删除一些列后):

  head(New_DF):

       ï..date   qty
    1 2017-07-05  61
    2 2018-01-20  73
    3 2017-07-10 145
    4 2017-07-01 255
    5 2017-05-23 267
    6 2017-06-24 242 

这就是我所做的:

    library(zoo)

    as.ts(read.zoo(New_Df, FUN = as.yearmon))

我得到这个错误:

    Error in seq.default(head(tt, 1), tail(tt, 1), deltat) : 
   'from' must be a finite number
   In addition: Warning message:
   In zoo(rval3, ix) :
   some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique

我想我为什么,这是因为我的i..date列中有很多重复项,不幸的是,由于时间序列ML模型与其他常规ML模型有些不同,因此我不想删除它们。由于时间序列模型基于先前值的序列,因此删除Date可能会影响我的解决方案。

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

2 个答案:

答案 0 :(得分:0)

您能否分享一些有关数据的背景信息。另外,如果数据中有一些重复项,您可以将它们汇总一下,这样就不会发生上述错误。

答案 1 :(得分:0)

1)yearmon 假设New_DF在注释的末尾可重复显示,请使用read.zoo指定参数aggregate=sum

library(zoo)
read.zoo(New_DF, FUN = as.yearmon, aggregate = sum)

给予:

May 2017 Jun 2017 Jul 2017 Jan 2018 
     267      242      461       73 

2)日期:如果要保留单个行,请使用Date类而不是yearmon(假设日期是唯一的)。

read.zoo(New_DF)
## 2017-05-23 2017-06-24 2017-07-01 2017-07-05 2017-07-10 2018-01-20 
##        267        242        255         61        145         73 

3)序列号另一种可能性是忽略日期并使用1、2,.3,..

zoo(New_DF$qty)
##   1   2   3   4   5   6 
## 267 242 255  61 145  73 

注意

Lines <- "      ï..date   qty
    1 2017-07-05  61
    2 2018-01-20  73
    3 2017-07-10 145
    4 2017-07-01 255
    5 2017-05-23 267
    6 2017-06-24 242 "
New_DF <- read.table(text = Lines)