On 8/25/2013 8:12 PM, Jim Lemon wrote:
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)
  }
  else {
   for(levl in levels(by)) {
    nextlags<-lags(x[by==levl],prefix=prefix)
    rownames(nextlags)<-paste(levl,rownames(nextlags),sep=".")
    if(exists("res")) res<-rbind(res,nextlags)
    else res<-nextlags
   }
  }
  return(res)
}

Thanks for trying again, but that doesn't work either with a by= variable. Note that your function is recursive, and also k=k
should be passed in the else{ ... lags() }.

> events <- sample(letters[1:4], 10, replace=TRUE)
> lags(events)
   lag0 lag1
1     c <NA>
2     b    c
3     d    b
4     d    d
5     b    d
6     b    b
7     b    b
8     c    b
9     a    c
10    a    a
> lags(events, 3)
   lag0 lag1 lag2 lag3
1     c <NA> <NA> <NA>
2     b    c <NA> <NA>
3     d    b    c <NA>
4     d    d    b    c
5     b    d    d    b
6     b    b    d    d
7     b    b    b    d
8     c    b    b    b
9     a    c    b    b
10    a    a    c    b
>
> events2 <- data.frame(sub=factor(rep(1:2, each=5)),
+                       event=sample(letters[1:4], 10, replace=TRUE),
+                       stringsAsFactors=FALSE)
> events2
   sub event
1    1     b
2    1     c
3    1     a
4    1     a
5    1     b
6    2     a
7    2     b
8    2     a
9    2     b
10   2     a
> lags(events2, 2, by=sub)
Error in lags(events2, 2, by = sub) : object 'res' not found
> lags(events2, by=sub)
Error in lags(events2, by = sub) : object 'res' not found

-Michael

--
Michael Friendly     Email: friendly AT yorku DOT ca
Professor, Psychology Dept. & Chair, Quantitative Methods
York University      Voice: 416 736-2100 x66249 Fax: 416 736-5814
4700 Keele Street    Web:   http://www.datavis.ca
Toronto, ONT  M3J 1P3 CANADA

______________________________________________
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