Skip to content

colmeans not working

9 messages · Ben Bolker, Eliza Botto, arun

#
[text file is also attached in case you find the format of email difficult to understand]
Dear useRs,You must all the planning for the christmas, but i am stucked in my office on the following issue
i had a file containg information about station name, year, month, day, and discharge information. i opened it by using 
following command
then by using following codes suggested by arun and rui i managed to obtain an output
library(reshape2)
res<-lapply(split(dat1,dat1$st),function(x) dcast(x,month~year,mean,value.var="discharge"))
$EE   month      2005      2006      2008      20091      1 1.7360776 0.8095275 1.6369044 0.81952412      2 0.6962079 3.8510720 0.4319758 2.33044953      3 1.0423625 2.7687266 0.2904245 0.70155274      4 2.4158326 1.2315324 1.4287387 1.5701019
$WW   month       2008      2009      20101      1  1.4737028  2.314878  2.6726612      2  1.6700918  2.609722  2.1124213      3  3.2387775  7.305766  6.9395364      4  6.7063592 18.745256 13.278218
i then eliminated the first column as i was interested in knowing the row wise mean of each sublist, by using

res1 <- lapply(res, function(x)x[,-c(1) ])
$EE        2005      2006      2008      20091  1.7360776 0.8095275 1.6369044 0.81952412  0.6962079 3.8510720 0.4319758 2.33044953  1.0423625 2.7687266 0.2904245 0.70155274  2.4158326 1.2315324 1.4287387 1.5701019
$WW         2008      2009      20101   1.4737028  2.314878  2.6726612   1.6700918  2.609722  2.1124213   3.2387775  7.305766  6.9395364   6.7063592 18.745256 13.278218

afterwards when i applied the "colMeans" command i was not able to calculate the mean as i got the following error
i cant spot the mistake in the last 5 hours.
you help is neededthanks in advance
eliza  		 	   		  
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: eliza.txt
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121224/322d49da/attachment.txt>
#
eliza botto <eliza_botto <at> hotmail.com> writes:
You can probably use 

dat1 <- read.csv("EL.csv") 

  (although you may have to double-check some of the other
default differences between read.csv and read.table, e.g.
quote and comment.char arguments)
output

library(reshape2)
res <- lapply(split(dat1,dat1$st),
   function(x) dcast(x,month~year,mean,value.var="discharge"))

[snip]
 
res1 <- lapply(res, function(x)x[,-1])

  (c() is redundant here)
Now you just need

lapply(res,colMeans)
#
HI Eliza,
Just a doubt:
YOu mentioned that
?"i then eliminated the first column as i was interested in knowing the row wise mean of each sublist, by using" and 
"afterwards when i applied the "colMeans" command i was not able to calculate the mean as i got the following error"

Do you need colMeans or rowMeans?
#
Hi Eliza,

I tried with the example you gave.? Couldn't reproduce the error.? 


res1<-list(read.table(text=" 
??????? 2005????? 2006????? 2008????? 2009 
? 1.7360776 0.8095275 1.6369044 0.8195241 
? 0.6962079 3.8510720 0.4319758 2.3304495 
? 1.0423625 2.7687266 0.2904245 0.7015527 
? 2.4158326 1.2315324 1.4287387 1.5701019 
",sep="",header=TRUE),read.table(text=" 
???????? 2008????? 2009????? 2010 
?? 1.4737028? 2.314878? 2.672661 
?? 1.6700918? 2.609722? 2.112421 
?? 3.2387775? 7.305766? 6.939536 
?? 6.7063592 18.745256 13.278218 
",sep="",header=TRUE))
?names(res1)<-c("EE","WW")
res1<-lapply(res1,function(x) {names(x)<-gsub("X","",names(x));x})
res1
#$EE
#?????? 2005????? 2006????? 2008????? 2009
#1 1.7360776 0.8095275 1.6369044 0.8195241
#2 0.6962079 3.8510720 0.4319758 2.3304495
#3 1.0423625 2.7687266 0.2904245 0.7015527
#4 2.4158326 1.2315324 1.4287387 1.5701019
#
#$WW
#????? 2008????? 2009????? 2010
#1 1.473703? 2.314878? 2.672661
#2 1.670092? 2.609722? 2.112421
#3 3.238777? 7.305766? 6.939536
#4 6.706359 18.745256 13.278218
lapply(res1,colMeans)
#$EE
#???? 2005????? 2006????? 2008????? 2009 
#1.4726202 2.1652146 0.9470108 1.3554070 
#
#$WW
#??? 2008???? 2009???? 2010 
#3.272233 7.743906 6.250709 

?lapply(res1,rowMeans)
#$EE
#[1] 1.250508 1.827426 1.200767 1.661551
#
#$WW
#[1]? 2.153747? 2.130745? 5.828026 12.909944


A.K.



----- Original Message -----
From: eliza botto <eliza_botto at hotmail.com>
To: bbolker at gmail.com; r-help at stat.math.ethz.ch
Cc: 
Sent: Sunday, December 23, 2012 7:48 PM
Subject: Re: [R] colmeans not working


Dear Ben,Thanks for replying but its still not working.your code was>lapply(res,colMeans)but i want to use "res1" instead of "res". when i did use it, i got same error.eliza
??? ???  ??? ?  ??? ??? ? 
??? [[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.
#
Dear Arun,on having a bird eye view i came to notice that the data you are using dont have month column at the beginning.my initial data was> res
$EE   month      2005      2006      2008      20091      1 1.7360776 0.8095275 1.6369044 0.81952412      2 0.6962079 3.8510720 0.4319758 2.33044953      3 1.0423625 2.7687266 0.2904245 0.70155274      4 2.4158326 1.2315324 1.4287387 1.5701019
$WW   month       2008      2009      20101      1  1.4737028  2.314878  2.6726612      2  1.6700918  2.609722  2.1124213      3  3.2387775  7.305766  6.9395364      4  6.7063592 18.745256 13.278218afterwards i used eliminated the month column and got
$EE        2005      2006      2008      20091  1.7360776 0.8095275 1.6369044 0.81952412  0.6962079 3.8510720 0.4319758 2.33044953  1.0423625 2.7687266 0.2904245 0.70155274  2.4158326 1.2315324 1.4287387 1.5701019
$WW         2008      2009      20101   1.4737028  2.314878  2.6726612   1.6700918  2.609722  2.1124213   3.2387775  7.305766  6.9395364   6.7063592 18.745256 13.278218
now when i m aPPLYING rowMeans or colMeans, i am getting error.i m attaching the text file for better understandging

eliza
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: eliza.txt
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121224/cfe0f38c/attachment.txt>
#
Dear Eliza,

It didn't change the result.
res<-list(read.table(text="
???? month????? 2005????? 2006????? 2008????? 2009
????? 1 1.7360776 0.8095275 1.6369044 0.8195241
????? 2 0.6962079 3.8510720 0.4319758 2.3304495
????? 3 1.0423625 2.7687266 0.2904245 0.7015527
????? 4 2.4158326 1.2315324 1.4287387 1.5701019
",sep="",header=TRUE),read.table(text="
?? month?????? 2008????? 2009????? 2010
????? 1? 1.4737028? 2.314878? 2.672661
????? 2? 1.6700918? 2.609722? 2.112421
????? 3? 3.2387775? 7.305766? 6.939536
????? 4? 6.7063592 18.745256 13.278218
",sep="",header=TRUE))
?names(res)<-c("EE","WW")
res<-lapply(res,function(x) {names(x)<-gsub("X","",names(x));x})
res
#$EE
?# month????? 2005????? 2006????? 2008????? 2009
#1???? 1 1.7360776 0.8095275 1.6369044 0.8195241
#2???? 2 0.6962079 3.8510720 0.4319758 2.3304495
#3???? 3 1.0423625 2.7687266 0.2904245 0.7015527
#4???? 4 2.4158326 1.2315324 1.4287387 1.5701019

#$WW
?# month???? 2008????? 2009????? 2010
#1???? 1 1.473703? 2.314878? 2.672661
#2???? 2 1.670092? 2.609722? 2.112421
#3???? 3 3.238777? 7.305766? 6.939536
#4???? 4 6.706359 18.745256 13.278218

lapply(res,function(x) colMeans(x[,-1]))
#$EE
#???? 2005????? 2006????? 2008????? 2009 
#1.4726202 2.1652146 0.9470108 1.3554070 
#
#$WW
#??? 2008???? 2009???? 2010 
#3.272233 7.743906 6.250709 

?lapply(res,function(x) rowMeans(x[,-1]))
#$EE
#[1] 1.250508 1.827426 1.200767 1.661551
#
#$WW
#[1]? 2.153747? 2.130745? 5.828026 12.909944
A.K.
#
HI Eliza,

The reason why you didn't get the result is because:
dat1<-read.csv("elisa.csv",header=TRUE,stringsAsFactors=FALSE)
str(dat1)
#'data.frame':??? 506953 obs. of? 5 variables:
# $ st?????? : chr? "AGOMO" "AGOMO" "AGOMO" "AGOMO" ...
# $ year???? : int? 2004 2004 2004 2004 2004 2004 2004 2004 2004 2004 ...
# $ month??? : int? 1 1 1 1 1 1 1 1 1 1 ...
# $ day????? : int? 1 2 3 4 5 6 7 8 9 10 ...
# $ discharge: num? 6.75 7.6 5.58 5.02 4.8 ...
res<-lapply(split(dat1,dat1$st),function(x) dcast(x,month~year,mean,value.var="discharge"))
?res1<-lapply(res,function(x) dim(x[,-1])) #upon checking the results here ? "$UZZCO NULL"
res["UZZCO"]
#$UZZCO
?#? month????? 2010
#1????? 1 0.3157691
#2????? 2 1.3984538
#3????? 3 3.0489628
#4????? 4 1.1438021
#5????? 5 1.5077654
#6????? 6 0.2834110
#7????? 7 0.1296051
#8????? 8 0.2399172
#9????? 9 0.1547817
#10??? 10 0.1488598
#11??? 11 1.8002791
#12??? 12 1.8530978

res2<-lapply(res,function(x) {if(is.data.frame(x[,-1])) colMeans(x[,-1]) else mean(x[,-1])}) #colMeans
res3<-lapply(res,function(x) {if(is.data.frame(x[,-1])) rowMeans(x[,-1]) else mean(x[,-1])}) #rowMeans
?head(res2,3)
#$AGOMO
?# ? 2004???? 2005???? 2006???? 2007???? 2008???? 2009???? 2010 
#3.122868 1.772765 2.109678 1.189568 5.351325 6.058146 6.483248 
#
#$AGONO
?# ?? 2002????? 2003????? 2004????? 2005????? 2006????? 2007????? 2008????? 2009 
#14.877080? 5.840740? 9.837951? 4.820480? 7.701798? 6.270975? 9.110857 10.942145 
? # ? 2010 
#12.762130 
#
#$ANZMA
? #? 2003???? 2004???? 2005???? 2006???? 2007???? 2008???? 2009 
#2.669676 3.358456 3.057410 2.472686 2.810164 4.595553 5.139108 

?head(res3,2)
#$AGOMO
?# ???? 1??????? 2??????? 3??????? 4??????? 5??????? 6??????? 7??????? 8 
#2.632842 3.720805 2.698315 6.368157 7.226502 3.336990 1.223611 1.592963 
? # ??? 9?????? 10?????? 11?????? 12 
#2.206013 1.657038 5.381786 6.676574 
#
#$AGONO
? # ???? 1???????? 2???????? 3???????? 4???????? 5???????? 6???????? 7???????? 8 
?#8.629570 10.066012? 8.624739? 8.591345 13.773817? 5.386458? 2.847495? 5.448138 
?? # ??? 9??????? 10??????? 11??????? 12 
?#9.266519? 7.333363 15.249745 14.335008 

Hope it helps.
A.K.