Convert a irregular time series to a regular time series

前端 未结 2 937
隐瞒了意图╮
隐瞒了意图╮ 2021-01-04 22:06

I am having a problem when converting irregular time series to regular time series. Below a simplified example can be found:

require(zoo)
t <- as.characte         


        
相关标签:
2条回答
  • 2021-01-04 22:12

    It's not a bug. There are 1,461 days spanning the 4 years in your time series. And it doesn't work for me the first time I run it. as.Date(t,"%Y") doesn't know what month/day to use to make a date, so it uses today's month/day. That does not make for reproducible analysis. Try this instead:

    t <- c(1981,1984,1985)
    d <- c(1,3,6)
    z <- zoo(d,t)
    z <- merge(z,zoo(,c(1981,1982,1983,1984,1985)))
    ts.d <- as.ts(z)
    

    Which yields:

    > ts.d
    Time Series:
    Start = 1981 
    End = 1985 
    Frequency = 1 
    [1]  1 NA NA  3  6
    
    0 讨论(0)
  • 2021-01-04 22:22

    As has been pointed out the as.Date(as.character(t), "%Y") is incorrect as it does not give the desired month and day. If we wanted to convert years to "Date" class we could do this as.Date(as.yearmon(t)) using zoo's as.yearmon; however, then we would have the further problem that different years have different numbers of days so there is no way to have a regular series using dates to represent years.

    Really we don't want dates in the first place. We just want to work with years in which case it simplifies to just:

    > z <- zoo(c(1, 3, 6), c(1981, 1984, 1985))
    > 
    > as.ts(z)
    Time Series:
    Start = 1981 
    End = 1985 
    Frequency = 1 
    [1]  1 NA NA  3  6
    

    or if we want to be safe we could do this which will force it to be annual even if the input has, by chance, a lower frequency: frequency(z) <- 1; as.ts(z) or just define the original zoo series to have a frequency of 1 right from the beginning:

    > z <- zoo(c(1, 3, 6), c(1981, 1984, 1985), frequency = 1)
    > as.ts(z)
    Time Series:
    Start = 1981 
    End = 1985 
    Frequency = 1 
    [1]  1 NA NA  3  6
    

    With this example it does not make a difference but in this case z <- zoo(c(1, 3, 6), c(1981, 1983, 1985), frequency = 1) the explicit frequency would be needed to prevent it from having a frequency of 0.5 .

    0 讨论(0)
提交回复
热议问题