Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create daily time series starting from a specific date

Tags:

r

time-series

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.

like image 408
FelisiaM Avatar asked Jul 18 '15 12:07

FelisiaM


People also ask

How is daily time series defined in R?

Time series in R is defined as a series of values, each associated with the timestamp also measured over regular intervals (monthly, daily) like weather forecasting and sales analysis. The R stores the time series data in the time-series object and is created using the ts() function as a base distribution.

Can you plot dates in R?

Dates Stored as Characters Note that the Date column in your data. frame is of class character ( chr ). This means that R is reading it as letters and numbers rather than dates that contain a value that is sequential. Thus, when you plot, R tries to plot EVERY date value in your data, on the x-axis.

How do I create a TS in R?

Creating a time series The ts() function will convert a numeric vector into an R time series object. The format is ts(vector, start=, end=, frequency=) where start and end are the times of the first and last observation and frequency is the number of observations per unit time (1=annual, 4=quartly, 12=monthly, etc.).

What does frequency in TS mean?

The “frequency” is the number of observations before the seasonal pattern repeats. 1. When using the ts() function in R, the following choices should be used. Data.


2 Answers

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))
like image 95
ulfelder Avatar answered Dec 11 '22 08:12

ulfelder


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))
like image 25
Marek Lahoda Avatar answered Dec 11 '22 08:12

Marek Lahoda