If you start looking at the time series classes (xts, zoo, etc) they have
very quick and flexible lag functions built in.

Might this be a slightly more efficient solution for the homebrew
implementation?

OurLag <- function(y, k=1) {
    t = y[,1,drop=F]; d = y[,-1,drop=F];
    if (is.matrix(y)) {rn = rownames(y); cn = colnames(y)} else {n =
names(y)}
    if (k >= 1) {
         d = rbind(matrix(NA,ncol=ncol(d), nrow = k), d)
         d = d[1:nrow(t),]
    } else {d = rbind(d[1:(nrow(d)+k),],matrix(NA,ncol=ncol(d), nrow = -k))}
    ans = data.frame(t,d)
   if (is.matrix(y)) {rownames(ans) = rn; colnames(ans) = cn} else
{names(ans) = n}
   return(ans)
}

Set k<0 for lead instead of lag.

Michael Weylandt

On Thu, Aug 4, 2011 at 11:24 AM, Dimitri Liakhovitski <
dimitri.liakhovitski@gmail.com> wrote:

> Hello!
>
> I have a data set:
> set.seed(123)
> y<-data.frame(week=seq(as.Date("2010-01-03"),
> as.Date("2011-01-31"),by="week"))
> y$var1<-c(1,2,3,round(rnorm(54),1))
> y$var2<-c(10,20,30,round(rnorm(54),1))
>
> # All I need is to create lagged variables for var1 and var2. I looked
> around a bit and found several ways of doing it. They all seem quite
> complicated - while in SPSS it's just a few letters (like LAG()). Here
> is what I've written but I wonder. It works - but maybe there is a
> very simple way of doing it in R that I could not find?
> I need the same for "lead" (opposite of lag).
> Any hint is greatly appreciated!
>
> ### The function I created:
> mylag <- function(x,max.lag=1){   # x has to be a 1-column data frame
>
> temp<-as.data.frame(embed(c(rep(NA,max.lag),x[[1]]),max.lag+1))[2:(max.lag+1)]
>   for(i in 1:length(temp)){
>     names(temp)[i]<-paste(names(x),".lag",i,sep="")
>    }
>  return(temp)
> }
>
> ### Running mylag to get my result:
> myvars<-c("var1","var2")
> for(i in myvars) {
>  y<-cbind(y,mylag(y[i]),max.lag=2)
> }
> (y)
>
> --
> Dimitri Liakhovitski
> marketfusionanalytics.com
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]

