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 <yelin at lbl.gov>
To: arun <smartpink111 at 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 <smartpink111 at 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 <yelin at lbl.gov>
>To: r-help at 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 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.
>
>