lags of a variable, with a factor
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