Hi, Try this: set.seed(52) dat1<- as.data.frame(matrix(sample(c(1:40,NA),100*60,replace=TRUE), nrow=600)) res1<-as.data.frame(do.call(rbind,lapply(split(dat1,((seq_len(nrow(dat1))-1)%/% 60)+1),function(x) colMeans(x,na.rm=TRUE)))) res1 # V1 V2 V3 V4 V5 V6 V7 V8 #1 21.20339 21.10000 20.64407 20.94828 20.22034 17.91379 21.38983 20.00000 #2 21.48214 19.50000 19.41379 22.13793 18.53448 20.40000 18.94915 19.77193 #3 22.11864 20.03448 19.55932 20.61667 19.41379 21.49153 20.08333 21.44828 #4 21.70000 17.93333 22.32759 18.66667 21.61017 20.94828 19.13793 20.32203 #5 20.91667 19.37288 20.16949 18.12500 22.05172 23.01724 22.17241 19.22034 #6 19.50847 21.05085 20.70690 20.16667 22.22807 21.36207 21.63793 17.13793 #7 19.53333 22.66667 20.98305 20.96667 23.06780 20.98305 21.83051 19.91525 #8 20.36207 23.55932 20.94915 20.47458 21.25424 19.94828 19.31481 20.01695 #9 18.62069 22.03509 19.50847 18.95000 21.19298 23.01695 19.63333 20.44828 #10 21.96491 20.10000 21.61667 20.65000 17.76667 20.25000 18.28070 19.68966 # V9 V10 #1 21.01695 18.84746 #2 17.46552 18.93333 #3 20.69492 22.60000 #4 19.05263 20.30508 #5 21.73333 22.40678 #6 21.86207 21.33333 #7 20.81034 17.25000 #8 21.53333 21.45763 #9 22.18966 19.70000 #10 22.31579 20.58929 A.K.
________________________________ From: Ye Lin <ye...@lbl.gov> To: arun <smartpink...@yahoo.com> Sent: Wednesday, April 10, 2013 6:02 PM Subject: Re: [R] how to calculate average of each column Hey A.K, I want to exclude the missing values in the table when do the col mean, and I code like this: res<-lapply(split(dat1,((seq_len(nrow(dat1))-1)%/% 60)+1),colMeans(dat1,na.rm=TRUE) then i get this error message: colMeans(dat1, na.rm = TRUE)' is not a function, character or symbol How can I tell R to omit the NAs automatically and do the mean? For example, if there is 4 out of 10 NAs in one column, it will calculate mean as sum of the remaining 6 values and divide by 6. Thanks! On Wed, Apr 10, 2013 at 1:13 PM, arun <smartpink...@yahoo.com> wrote: Hi, >TRy this: >set.seed(52) >dat1<- as.data.frame(matrix(sample(1:40,100*60,replace=TRUE), nrow=600)) > >lapply(split(dat1,((seq_len(nrow(dat1))-1)%/% 60)+1),nrow) >#$`1` >#[1] 60 > >#$`2` >#[1] 60 > >#$`3` >#[1] 60 > >res<-lapply(split(dat1,((seq_len(nrow(dat1))-1)%/% 60)+1),colMeans) > res[1:2] >#$`1` ># V1 V2 V3 V4 V5 V6 V7 V8 >#20.95000 20.53333 20.55000 21.13333 20.10000 18.33333 21.13333 20.50000 ># V9 V10 >#20.86667 18.70000 > >#$`2` ># V1 V2 V3 V4 V5 V6 V7 V8 >#22.16667 19.85000 19.73333 22.26667 18.80000 19.93333 18.85000 20.46667 ># V9 V10 >#17.81667 18.51667 > >A.K. > > > > >----- Original Message ----- >From: Ye Lin <ye...@lbl.gov> >To: r-help@r-project.org >Cc: >Sent: Wednesday, April 10, 2013 1:46 PM >Subject: [R] how to calculate average of each column > >Hey All, > >I have a large dataset and I want to calculate the average of each column >then return a new dataset. > >Here is my question: I dont know if there is a function that can allow me >to calculate the average every 60 records of data in the whole dataset, and >return a new data frame. Not sure if I have to divide the dataset first for >every 60, then do the mean or can i directly do that. > >thanks for your help! > > >cici > > [[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.