6
votes

I am trying to create a ts object using R for a daily time series that starts on 24.02.2015 and ends on 13.04.2015. I have put the frequency=7 for daily data but I cannot find a way to put the exact date as start argument.

3
ts is not normally used for dates. Use zoo or xts instead. - G. Grothendieck

3 Answers

13
votes

I think this is what you want, using the decimal_date() function from 'lubridate' to get the proper start time for a daily series and assuming that the vector of values you want to index as a ts is called x and is of the proper length:

library(lubridate)
df <- ts(x, start = decimal_date(as.Date("2015-02-24")), frequency = 365)

Here's what that looks like if I use rnorm() to generate an x of the proper length:

> df
Time Series:
Start = c(2015, 55) 
End = c(2015, 103) 
Frequency = 365 
[1]  0.4284579  1.9384426  0.1242242 -2.4002789 -0.4064669  0.6945274 -0.5172909  0.4772347  0.8758635 -1.7233406  0.5929249  1.5662611  1.0692173 -0.1354226
[15]  1.1404375  0.7714662 -0.2871663 -5.2720038 -1.7353146 -0.7053329  1.0206803  1.7170262 -0.3469172  0.2594851  2.0371700 -2.1549066 -0.6639050 -0.4912258
[29] -0.3849884 -3.0448583 -1.3317834  1.6173705  0.7176759 -0.8646802 -1.7697016  1.1114061  0.6941131 -0.1942612 -0.1836107 -0.5850649 -1.7449090 -3.3646555
[43] -0.4341833  1.9721407  1.4995265  1.7168002  1.8617295 -3.4578959  1.1639413

Note that for daily indexing, you want frequency = 365, not 7, which denotes weekly indexing.

If you want a vector of dates that you can use in 'zoo' instead, this does it:

seq(from = as.Date("2015-02-24"), to = as.Date("2015-04-13"), by = 1)

So you would create a zoo object like this:

zoo(x, seq(from = as.Date("2015-02-24"), to = as.Date("2015-04-13"), by = 1))
0
votes

And if you want a table with date column, you can use:

df <- data.frame(date = seq(from = as.Date("2015-02-24"), to = as.Date("2015-04-13"), by = 1))
0
votes

Using the xts library:

library(xts)
data_xts <- xts(x=dataframe$x, order.by=as.Date(dataframe$date, "%m/%d/%Y"))

With this method, you can't or don't have to specify the end date.

The output looks like this:

              [,1]
2020-01-01  7168.3
2020-01-02  7174.4
2020-01-03  6942.3
2020-01-04  7334.8