Thankyou very much arun. Its always nice to hear from you.
Eliza

> Date: Sat, 10 May 2014 03:55:29 -0700
> From: smartpink111@yahoo.com
> Subject: Re: [R] adding rows
> To: r-help@r-project.org
> CC: ruipbarradas@sapo.pt; eliza_botto@hotmail.com
> 
> 
> 
> HI,
> If you want to try other ways:
> 
> fun1 <- function(mat, rowN) {
>     dm <- dim(mat)[1]
>     rowN1 <- rowN - 1
>     indx <- rep(1:rowN, dm - rowN1) + rep(seq(0, dm - rowN), each = rowN)
>     indx1 <- (seq_along(indx)-1)%/%rowN+1
>     as.vector(tapply(indx, list(indx1), FUN = function(i) sum(mat[i, ])))
> }
> 
> #or
> 
> fun2 <- function(mat, rowN) {
>     dm <- dim(mat)[1]
>     rowN1 <- rowN - 1
>     indx <- rep(1:rowN, dm - rowN1) + rep(seq(0, dm - rowN), each = rowN)
>     mat1 <- mat[indx, ]
>     indx1 <- rep((seq_along(indx) - 1)%/%rowN + 1, ncol(mat))
>     colSums(matrix(mat1[sort.int(indx1, method = "quick", index.return = TRUE)$ix], 
>         ncol = dm - rowN1))
> }
> 
> ##But the above methods are slower in large datasets.  
> ##Rui's function
> 
> funOld <- function(mat, rowN) {
>     dm <- dim(mat)[1]
>     rowN1 <- rowN - 1
>     sapply(1:(dm - rowN1), function(i) sum(mat[i:(i + rowN1), ]))
> }
> 
> ###Modified Rui's function using ?for() loop instead of ?sapply()
> 
> funNew <- function(mat, rowN) {
>     dm <- dim(mat)[1]
>     rowN1 <- rowN - 1
>     vec <- vector(mode = "numeric", length = dm - rowN1)
>     for (i in 1:(dm - rowN1)) {
>         vec[i] <- sum(mat[i:(i + rowN1), ])
>     }
>     vec
> }
> 
> ##Speed comparison
> set.seed(348)
> el1 <- matrix(sample(1:300, 1e6*50,replace=TRUE),ncol=50)
> 
> system.time(r1 <- fun1(el1,3))
> #  user  system elapsed 
> # 15.888   0.120  16.042 
> 
> system.time(r2 <- funOld(el1,3))
> #   user  system elapsed 
> #  5.061   0.004   5.076 
> 
>  system.time(r3 <- fun2(el1,3))
>  #  user  system elapsed 
>  #12.371   1.329  13.735 
> 
> system.time(r4 <- funNew(el1,3))
> #   user  system elapsed 
> #  4.716   0.000   4.727 
> 
> library(compiler)
> funOldc <- cmpfun(funOld)
> funNewc <- cmpfun(funNew)
> fun2c <- cmpfun(fun2)
>  system.time(r5 <- funOldc(el1,3))
>  #  user  system elapsed 
>  # 7.458   0.000   7.476 
> 
> system.time(r6 <- funNewc(el1,3))
>  #  user  system elapsed 
>  # 3.529   0.000   3.536 
>  sapply(paste0("r",2:6),function(x) all.equal(r1,get(x) ))
>  # r2   r3   r4   r5   r6 
> #TRUE TRUE TRUE TRUE TRUE 
> 
> 
> A.K.
> 
> 
> 
> 
> 
> 
> 
> On Friday, May 9, 2014 5:56 PM, Rui Barradas <ruipbarradas@sapo.pt> wrote:
> Hello,
> 
> Try the following.
> 
> sapply(1:(30 - 2), function(i) sum(el[i:(i+2), ]))
> 
> 
> but with number of rows instead of 30.
> 
> Hope this helps,
> 
> Rui Barradas
> 
> Em 09-05-2014 22:35, eliza botto escreveu:
> > Dear useRs,
> > I have a matrix, say "el" of 30 rows and 10 columns, as
> > el<-matrix(sample(1:300),ncol=10)
> > I want to sum up various sets of three rows of each column in the following manner
> > sum(el[c(1,2,3),]) ##adding row number 1, 2 and 3 of each column
> > sum(el[c(2,3,4),])##adding row number 2, 3 and 4 of each column
> > sum(el[c(3,4,5),])##adding row number 3, 4 and 5 of each column
> > sum(el[c(4,5,6),])
> > sum(el[c(5,6,7),])
> > sum(el[c(6,7,8),])
> > sum(el[c(7,8,9),])
> > sum(el[c(8,9,10),])
> > sum(el[c(9,10,11),])
> > ................
> > ......
> > so on
> > ..............
> > I know how to do it manually, but since my original matrix has 2000 rows, I therefore want to figure out a more conveinient way.
> > Thankyou so very much in advance,
> >
> > Eliza                         
> >     [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > 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.
> 
> >
> 
> ______________________________________________
> 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.
 		 	   		  
	[[alternative HTML version deleted]]

