Thankyou very much arun. Its always nice to hear from you. Eliza > Date: Sat, 10 May 2014 03:55:29 -0700 > From: smartpink...@yahoo.com > Subject: Re: [R] adding rows > To: r-help@r-project.org > CC: ruipbarra...@sapo.pt; eliza_bo...@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 <ruipbarra...@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]]
______________________________________________ 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.