Using runmean from caTools the first one below does it in under 1 second but will not handle NAs. The second one takes under 15 seconds and handles them by replacing them with linear approximations. Note that k must be odd.
# 1 library(caTools) set.seed(1) system.time({ y <- rnorm(140001) x <- as.numeric(seq(y)) k <- 61 Mxy <- runmean(x * y, k) Mxx <- runmean(x * x, k) Mx <- runmean(x, k) My <- runmean(y, k) b <- (Mxy - Mx * My) / (Mxx - Mx * Mx) a <- My - b * Mx }) # 2 library(caTools) library(zoo) set.seed(1) system.time({ y <- rnorm(140000) x <- as.numeric(seq(y)) x[100:200] <- NA x <- na.approx(zoo(x)) y <- zoo(y) k <- 60 Mxy <- runmean(x * y, k) Mxx <- runmean(x * x, k) Mx <- runmean(x, k) My <- runmean(y, k) b <- (Mxy - Mx * My) / (Mxx - Mx * Mx) a <- My - b * Mx }) On 5/1/06, Guojun Zhu <[EMAIL PROTECTED]> wrote: > I basically has a long data.frame a. but I only need > three columns x,y. Let us say the index of row is t. > I need to produce new column s_t as the linear > regression coefficient of (x_(t-60),...x_(t-1)) on > (y_(t-60),...,y_(t-1)). The data is about 140,000 > rows. I wrote a simple code on this which is super > slow, it takes more than 2 hours on a 2.8Ghz Intel Duo > Core. My friend use SAS and his code needs only > couple of minutes. I know there must be some more > efficient way to write it. Can anyone help me on > this? Here is the code. > > Also one line produce a complete NA temp$y and lm > function failed on that. How to make it just produce > a NA instead and keep runing? > > attach(return) > betat=rep(NA,length(RET)) > for (i in 61:length(RET)){cat(i," "); > if (year[[i]]>=1995){ > > temp<-data.frame(y=RET[(i-60):(i-1)]-riskfree[(i-60):(i-1)],x=sprtrn[(i-60):(i-1)]-riskfree[(i-60):(i-1)]) > > betat[[i]]<-lm(y~x+1,na.action=na.exclude,temp)[[1]][[2]] > #if (i%%100==0) > cat(i," "); > > > return$vol.cap[[i]]=mean(VOL[(i-12):(i-1)],na.rm=TRUE)/return$cap[[i]] > } > } > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html