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.

Reply via email to