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
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
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
.