But quite a few thousand dollars cheaper - seems a fair trade to me! Seriously though: your last few requests have been focused on time objects, so I strongly suggest you take a look at xts/zoo ( http://cran.r-project.org/web/packages/xts/index.html) -- it will make time objects much easier for you and lagging will be as simple as lag(x). They're very good for things that are time indexed: for things where the dates themselves are data points, you'll need to stick with the timeDate package and data frames. In that case, if you load up your preferred flavour of the provided lag functions, they will be just as brief as SPSS.
If you're not doing so already, I suggest you start putting together a .R file of these sorts of little helper functions and source() it (from a fixed location; not your wd) at the beginning of all your scripts. For all intents and purposes, it becomes your own little starter package. MW PS -- Our "tech support" is also probably sassier than theirs too. :-) On Thu, Aug 4, 2011 at 2:46 PM, Dimitri Liakhovitski < [email protected]> wrote: > Thanks a lot, guys! > It's really helpful. But - to be objective- it's still quite a few > lines longer than in SPSS. > Dimitri > > On Thu, Aug 4, 2011 at 2:36 PM, Daniel Nordlund <[email protected]> > wrote: > > > > > >> -----Original Message----- > >> From: [email protected] [mailto:[email protected] > ] > >> On Behalf Of Dimitri Liakhovitski > >> Sent: Thursday, August 04, 2011 8:24 AM > >> To: r-help > >> Subject: [R] Efficient way of creating a shifted (lagged) variable? > >> > >> 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 > >> > > > > Dimitri, > > > > I would first look into the zoo package as has already been suggested. > However, if you haven't already got your solution then here are a couple of > functions that might help you get started. I won't vouch for efficiency. > > > > > > lag.fun <- function(df, x, max.lag=1) { > > for(i in x) { > > for(j in 1:max.lag){ > > lagx <- paste(i,'.lag',j,sep='') > > df[,lagx] <- c(rep(NA,j),df[1:(nrow(df)-j),i]) > > } > > } > > df > > } > > > > lead.fun <- function(df, x, max.lead=1) { > > for(i in x) { > > for(j in 1:max.lead){ > > leadx <- paste(i,'.lead',j,sep='') > > df[,leadx] <- c(df[(j+1):(nrow(df)),i],rep(NA,j)) > > } > > } > > df > > } > > > > y <- lag.fun(y,myvars,2) > > y <- lead.fun(y,myvars,2) > > > > > > Hope this is helpful, > > > > Dan > > > > Daniel Nordlund > > Bothell, WA USA > > > > > > > > > > -- > Dimitri Liakhovitski > marketfusionanalytics.com > > ______________________________________________ > [email protected] 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]] ______________________________________________ [email protected] 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.

