On 08/24/2013 04:16 AM, Michael Friendly wrote:
For sequential analysis of sequences of events, I want to calculate a
series of lagged
versions of a (numeric or character) variable. The simple function below
does this,
but I can't see how to generalize this to the case where there is also a
factor variable
and I want to calculate lags separately for each level of the factor
(by). Can anyone help?
...
 > do.call(rbind, lg)
lag0 lag1 lag2
1.1 b <NA> <NA>
1.2 d b <NA>
1.3 d d b
1.4 c d d
1.5 b c d
2.1 b <NA> <NA>
2.2 b b <NA>
2.3 b b b
2.4 d b b
2.5 a d b
 >

Hi Michael,
Maybe this will do it.

lags <- function(x, k=1, prefix='lag', by) {
  if(missing(by)) {
  n <- length(x)
  res <- data.frame(lag0=x)
  for (i in 1:k) {
    res <- cbind(res, c(rep(NA, i), x[1:(n-i)]))
  }
  colnames(res) <- paste0(prefix, 0:k)
  return(res)
  }
  else {
   for(levl in levels(by)) {
    nextlags<-lags(x[by==levl,],prefix=prefix)
    rownames(nextlags)<-paste(levl,rownames(nextlags),sep=".")
    if(exist(res)) res<-rbind(res,nextlags)
    else res<-nextlags
   }
  }
}

Jim

______________________________________________
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.

Reply via email to