How can I automatically create n lags in a timeseries?

后端 未结 3 1132
情话喂你
情话喂你 2020-12-10 09:33

I have a dataframe with a column t. I want to create n lagged columns that has names like t-1,t-2 etc..

  year      t  t-1 t-2
19620101    1   NA  NA
1963010         


        
3条回答
  •  一整个雨季
    2020-12-10 10:03

    1) lag.zoo The lag.zoo function in the zoo package can accept a vector of lags. Here we want the 0th lag, the -1 lag and the -2 lag:

    library(zoo)
    cbind(DF[-2], coredata(lag(zoo(DF$t), 0:-2)))
    

    giving:

          year lag0 lag-1 lag-2
    1 19620101    1    NA    NA
    2 19630102    2     1    NA
    3 19640103    3     2     1
    4 19650104    4     3     2
    5 19650104    5     4     3
    6 19650104    6     5     4
    

    which is as you have in the question but are you sure that that is what you want? The last three rows all have the same date so the 4th row, for example, is being lagged to the same date.

    2) head Defining a simple Lag function we can do this using only the base of R:

    Lag <- function(x, n = 1) c(rep(NA, n), head(x, -n))  # n > 0
    
    data.frame(DF, `t-1` = Lag(DF$t), `t-2` = Lag(DF$t, 2), check.names = FALSE)
    

    giving:

          year t t-1 t-2
    1 19620101 1  NA  NA
    2 19630102 2   1  NA
    3 19640103 3   2   1
    4 19650104 4   3   2
    5 19650104 5   4   3
    6 19650104 6   5   4
    

    Note: We used this as our data frame:

    DF <- data.frame(year = c(19620101, 19630102, 19640103, 19650104, 19650104,
                            19650104), t = 1:6)
    

提交回复
热议问题