I have a problem dealing with time series in R.
#--------------read data
wb = loadWorkbook(\"Countries_Europe_Prices.xlsx\")
df = readWorksheet(wb, sheet=\"Sh
There is an easier way of doing this which I have captured fully from this link. What I will do here is explaining what should you do in steps:
First create the following function by running the following code:
shift<-function(x,shift_by){
stopifnot(is.numeric(shift_by))
stopifnot(is.numeric(x))
if (length(shift_by)>1)
return(sapply(shift_by,shift, x=x))
out<-NULL
abs_shift_by=abs(shift_by)
if (shift_by > 0 )
out<-c(tail(x,-abs_shift_by),rep(NA,abs_shift_by))
else if (shift_by < 0 )
out<-c(rep(NA,abs_shift_by), head(x,-abs_shift_by))
else
out<-x
out
}
This will create a function called shift
with two arguments; one is the vector you need to operate its lag/lead and the other is number of lags/leads you need.
Example:
Suppose you have the following vector:
x<-seq(1:10)
x
[1] 1 2 3 4 5 6 7 8 9 10
if you need x
's first order lag
shift(x,-1)
[1] NA 1 2 3 4 5 6 7 8 9
if you need x
's first order lead (negative lag)
shift(x,1)
[1] 2 3 4 5 6 7 8 9 10 NA