Given a matrix of MxN want to take the means of rows in the following fashion m<-matrix(seq(1,80),ncol=20, nrow=4) result<-matrix(NA,nrow=4,ncol=20/5) result[,1]<-apply(m[,1:5],1,mean) result[,2]<-apply(m[,6:10],1,mean) result[,3]<-apply(m[,11:15],1,mean) result[,4]<-apply(m[,16:20],1,mean) result [,1] [,2] [,3] [,4] [1,] 9 29 49 69 [2,] 10 30 50 70 [3,] 11 31 51 71 [4,] 12 32 52 72 So, I want the mean of every successive 5 values in a row as the dimension in columns is wide I cant write it with multiple apply as above [[alternative HTML version deleted]]
You might find it useful to look at rollmean from the zoo package. Tal ----------------Contact Details:------------------------------------------------------- Contact me: Tal.Galili@gmail.com | 972-52-7275845 Read me: www.talgalili.com (Hebrew) | www.biostatistics.co.il (Hebrew) | www.r-statistics.com (English) ---------------------------------------------------------------------------------------------- On Thu, Jul 15, 2010 at 12:39 PM, steven mosher <moshersteven@gmail.com>wrote:> Given a matrix of MxN > want to take the means of rows in the following fashion > m<-matrix(seq(1,80),ncol=20, nrow=4) > result<-matrix(NA,nrow=4,ncol=20/5) > result[,1]<-apply(m[,1:5],1,mean) > result[,2]<-apply(m[,6:10],1,mean) > result[,3]<-apply(m[,11:15],1,mean) > result[,4]<-apply(m[,16:20],1,mean) > result > [,1] [,2] [,3] [,4] > [1,] 9 29 49 69 > [2,] 10 30 50 70 > [3,] 11 31 51 71 > [4,] 12 32 52 72 > > So, I want the mean of every successive 5 values in a row > > as the dimension in columns is wide I cant write it with multiple apply as > above > > [[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. >[[alternative HTML version deleted]]
Hi Steven, how about this (using simple matrix algebra) wind<-5 #size of window to be aggregated if (ncol(m)%%wind!=0) stop('dimension of m does not fit') #crude check tmat<-apply(diag(ncol(m)/wind),1,function(x)rep(x,each=wind))/wind m%*%tmat hth. Am 15.07.2010 11:39, schrieb steven mosher:> Given a matrix of MxN > want to take the means of rows in the following fashion > m<-matrix(seq(1,80),ncol=20, nrow=4) > result<-matrix(NA,nrow=4,ncol=20/5) > result[,1]<-apply(m[,1:5],1,mean) > result[,2]<-apply(m[,6:10],1,mean) > result[,3]<-apply(m[,11:15],1,mean) > result[,4]<-apply(m[,16:20],1,mean) > result > [,1] [,2] [,3] [,4] > [1,] 9 29 49 69 > [2,] 10 30 50 70 > [3,] 11 31 51 71 > [4,] 12 32 52 72 > > So, I want the mean of every successive 5 values in a row > > as the dimension in columns is wide I cant write it with multiple apply as > above > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >-- Eik Vettorazzi Institut f?r Medizinische Biometrie und Epidemiologie Universit?tsklinikum Hamburg-Eppendorf Martinistr. 52 20246 Hamburg T ++49/40/7410-58243 F ++49/40/7410-57790
Hi Steven, You can just cut the matrix up into a 5 column matrix and use apply as normal m2<-matrix(as.vector(t(m)), ncol=5, byrow=TRUE) result<-matrix(apply(m2, 1, mean), ncol=ncol(m)/ncol(m2), byrow=TRUE) result -- Patrick Rogers Dept. of Political Science University of California, San Diego On Jul 15, 2010, at 2:39 AM, steven mosher wrote:> Given a matrix of MxN > want to take the means of rows in the following fashion > m<-matrix(seq(1,80),ncol=20, nrow=4) > result<-matrix(NA,nrow=4,ncol=20/5) > result[,1]<-apply(m[,1:5],1,mean) > result[,2]<-apply(m[,6:10],1,mean) > result[,3]<-apply(m[,11:15],1,mean) > result[,4]<-apply(m[,16:20],1,mean) > result > [,1] [,2] [,3] [,4] > [1,] 9 29 49 69 > [2,] 10 30 50 70 > [3,] 11 31 51 71 > [4,] 12 32 52 72 > > So, I want the mean of every successive 5 values in a row > > as the dimension in columns is wide I cant write it with multiple apply as > above > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.