Search code examples
rtime-seriesxtszoo

Basic lag in R vector/dataframe


Will most likely expose that I am new to R, but in SPSS, running lags is very easy. Obviously this is user error, but what I am missing?

x <- sample(c(1:9), 10, replace = T)
y <- lag(x, 1)
ds <- cbind(x, y)
ds

Results in:

      x y
 [1,] 4 4
 [2,] 6 6
 [3,] 3 3
 [4,] 4 4
 [5,] 3 3
 [6,] 5 5
 [7,] 8 8
 [8,] 9 9
 [9,] 3 3
[10,] 7 7

I figured I would see:

     x y
 [1,] 4 
 [2,] 6 4
 [3,] 3 6
 [4,] 4 3
 [5,] 3 4
 [6,] 5 3
 [7,] 8 5
 [8,] 9 8
 [9,] 3 9
[10,] 7 3

Any guidance will be much appreciated.


Solution

  • Another way to deal with this is using the zoo package, which has a lag method that will pad the result with NA:

    require(zoo)
    > set.seed(123)
    > x <- zoo(sample(c(1:9), 10, replace = T))
    > y <- lag(x, -1, na.pad = TRUE)
    > cbind(x, y)
       x  y
    1  3 NA
    2  8  3
    3  4  8
    4  8  4
    5  9  8
    6  1  9
    7  5  1
    8  9  5
    9  5  9
    10 5  5
    

    The result is a multivariate zoo object (which is an enhanced matrix), but easily converted to a data.frame via

    > data.frame(cbind(x, y))