Hello helpers, I have a two part issue. FIRSTLY, I am attempting to write a function for coefficient of variation, using> co.var <- function(rowleyi) ( 100*sd(rowleyi)/mean(rowleyi) ) #where rowleyi is my data set, which has multiple columns and rows of data.This is not working because some of my columns have NAs. When I try to use> co.var(rowleyi$TL, na.rm=TRUE) #where TL is one of my column names, it gives me an error message:Error in co.var(rowleyi$TL, na.rm = TRUE) : unused argument(s) (na.rm = TRUE) I do not know what this means. How can I get this function to work? SECONDLY, how can I then get that function to work within an aggragate? Do I still use>aggregate(. ~ subspecies, data = rowleyi, CV, na.rm=TRUE) #where subspecies is the header for rows? This has worked for mean, std.error, sd, etc.Thank you! Amanda Jones
HI, For the first part, may be this helps: set.seed(5) mat1<-matrix(sample(c(1:9,NA),20,replace=TRUE),ncol=5) rowleyi<-data.frame(mat1) ?co.var<-function(x) 100*(sd(x,na.rm=TRUE)/mean(x,na.rm=TRUE)) ?apply(rowleyi,2,function(x) co.var(x)) #????? X1?????? X2?????? X3?????? X4?????? X5 #53.29387 49.53113 45.82576 35.35534 34.99271 #or sapply(rowleyi,function(x) co.var(x)) #????? X1?????? X2?????? X3?????? X4?????? X5 #53.29387 49.53113 45.82576 35.35534 34.99271 A.K. ----- Original Message ----- From: Amanda Jones <akjones82 at gmail.com> To: r-help at r-project.org Cc: Sent: Monday, November 19, 2012 4:01 PM Subject: [R] Coefficient of Variation, NA, Aggregate Hello helpers, I have a two part issue. FIRSTLY, I am attempting to write a function for coefficient of variation, using> co.var <- function(rowleyi) ( 100*sd(rowleyi)/mean(rowleyi) )? #where rowleyi is my data set, which has multiple columns and rows of data.This is not working because some of my columns have NAs. When I try to use> co.var(rowleyi$TL, na.rm=TRUE)? #where TL is one of my column names, it gives me an error message:Error in co.var(rowleyi$TL, na.rm = TRUE) : ? unused argument(s) (na.rm = TRUE) I do not know what this means. How can I get this function to work? SECONDLY, how can I then get that function to work within an aggragate? Do I still use>aggregate(. ~ subspecies, data = rowleyi, CV, na.rm=TRUE) #where subspecies is the header for rows? This has worked for mean, std.error, sd, etc.Thank you! Amanda Jones ______________________________________________ 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.
HI, Your example dataset is in unreadable format.? You could use dput(). set.seed(5) ?mat1<-matrix(sample(c(1:9,NA),20,replace=TRUE),ncol=5) ?rowleyi<-data.frame(mat1) ? co.var<-function(x) 100*(sd(x,na.rm=TRUE)/mean(x,na.rm=TRUE)) ?rowleyi<-data.frame(subspecies=rep(LETTERS[1:2],2),rowleyi) with(rowleyi,aggregate(cbind(X1,X2,X3,X4,X5),by=list(subspecies),function(x) co.var(x))) ? Group.1?????? X1??????? X2?????? X3?????? X4?????? X5 1?????? A?????? NA 70.710678?????? NA 20.20305 28.28427 2?????? B 56.56854? 8.318903 60.60915 47.14045? 0.00000 With your aggregate() aggregate(.~subspecies,data=rowleyi,co.var) #? subspecies?????? X1?????? X2?????? X3?????? X4 X5 #1????????? B 56.56854 8.318903 60.60915 47.14045? 0 A.K. ----- Original Message ----- From: Amanda Jones <akjones82 at gmail.com> To: r-help at r-project.org Cc: Sent: Monday, November 19, 2012 4:01 PM Subject: [R] Coefficient of Variation, NA, Aggregate Hello helpers, I have a two part issue. FIRSTLY, I am attempting to write a function for coefficient of variation, using> co.var <- function(rowleyi) ( 100*sd(rowleyi)/mean(rowleyi) )? #where rowleyi is my data set, which has multiple columns and rows of data.This is not working because some of my columns have NAs. When I try to use> co.var(rowleyi$TL, na.rm=TRUE)? #where TL is one of my column names, it gives me an error message:Error in co.var(rowleyi$TL, na.rm = TRUE) : ? unused argument(s) (na.rm = TRUE) I do not know what this means. How can I get this function to work? SECONDLY, how can I then get that function to work within an aggragate? Do I still use>aggregate(. ~ subspecies, data = rowleyi, CV, na.rm=TRUE) #where subspecies is the header for rows? This has worked for mean, std.error, sd, etc.Thank you! Amanda Jones ______________________________________________ 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.
Fantastic, thank you! On Mon, Nov 19, 2012 at 3:44 PM, arun <smartpink111 at yahoo.com> wrote:> HI, > > Your example dataset is in unreadable format. You could use dput(). > set.seed(5) > mat1<-matrix(sample(c(1:9,NA),20,replace=TRUE),ncol=5) > rowleyi<-data.frame(mat1) > co.var<-function(x) 100*(sd(x,na.rm=TRUE)/mean(x,na.rm=TRUE)) > rowleyi<-data.frame(subspecies=rep(LETTERS[1:2],2),rowleyi) > > > with(rowleyi,aggregate(cbind(X1,X2,X3,X4,X5),by=list(subspecies),function(x) co.var(x))) > Group.1 X1 X2 X3 X4 X5 > 1 A NA 70.710678 NA 20.20305 28.28427 > 2 B 56.56854 8.318903 60.60915 47.14045 0.00000 > > > With your aggregate() > aggregate(.~subspecies,data=rowleyi,co.var) > # subspecies X1 X2 X3 X4 X5 > #1 B 56.56854 8.318903 60.60915 47.14045 0 > > A.K. > > > > > ----- Original Message ----- > From: Amanda Jones <akjones82 at gmail.com> > To: r-help at r-project.org > Cc: > Sent: Monday, November 19, 2012 4:01 PM > Subject: [R] Coefficient of Variation, NA, Aggregate > > Hello helpers, > > I have a two part issue. FIRSTLY, I am attempting to write a function > for coefficient of variation, using > >> co.var <- function(rowleyi) ( 100*sd(rowleyi)/mean(rowleyi) ) #where rowleyi is my data set, which has multiple columns and rows of data. > > This is not working because some of my columns have NAs. When I try to use > >> co.var(rowleyi$TL, na.rm=TRUE) #where TL is one of my column names, it gives me an error message: > > Error in co.var(rowleyi$TL, na.rm = TRUE) : > unused argument(s) (na.rm = TRUE) > > I do not know what this means. How can I get this function to work? > SECONDLY, how can I then get that function to work within an > aggragate? Do I still use > >>aggregate(. ~ subspecies, data = rowleyi, CV, na.rm=TRUE) #where subspecies is the header for rows? This has worked for mean, std.error, sd, etc. > > Thank you! > Amanda Jones > > ______________________________________________ > 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. >
HI, No problem. You got two NA in the previous example. According to the coefficient of variaion documentation in R (http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/raster/html/cv.html) Compute the coefficient of variation (expressed as a percentage). If there is only a single value, sd is NA and cv returns NA if aszero=FALSE (the default). However, if (aszero=TRUE), cv returns 0." ? If I use another example: set.seed(5) ?mat1<-matrix(sample(c(1:10,NA),30,replace=TRUE),ncol=5) rowleyi<-data.frame(mat1) co.var<-function(x) 100*(sd(x,na.rm=TRUE)/mean(x,na.rm=TRUE)) ?rowleyi<-data.frame(subspecies=rep(LETTERS[1:2],3),rowleyi) with(rowleyi,aggregate(cbind(X1,X2,X3,X4,X5),by=list(subspecies),function(x) co.var(x))) #? Group.1?????? X1?????? X2?????? X3?????? X4?????? X5 #1?????? A 28.28427 28.28427 25.00000 52.67827 57.73503 #2?????? B 34.64102 61.97443 52.67827 51.50788?????? NA #Other way: ?do.call(cbind,lapply(lapply(lapply(rowleyi[,-1],function(x) data.frame(subspecies=rowleyi[,1],x)),function(x) x[complete.cases(x),]),function(x) aggregate(.~subspecies,data=x,co.var))) #? X1.subspecies???? X1.x X2.subspecies???? X2.x X3.subspecies???? X3.x #1???????????? A 28.28427???????????? A 28.28427???????????? A 25.00000 #2???????????? B 34.64102???????????? B 61.97443???????????? B 52.67827 ? X4.subspecies???? X4.x X5.subspecies???? X5.x #1???????????? A 52.67827???????????? A 57.73503 #2???????????? B 51.50788???????????? B?????? NA A.K. ----- Original Message ----- From: Amanda Jones <akjones82 at gmail.com> To: arun <smartpink111 at yahoo.com> Cc: R help <r-help at r-project.org> Sent: Monday, November 19, 2012 5:50 PM Subject: Re: [R] Coefficient of Variation, NA, Aggregate Fantastic, thank you! On Mon, Nov 19, 2012 at 3:44 PM, arun <smartpink111 at yahoo.com> wrote:> HI, > > Your example dataset is in unreadable format.? You could use dput(). > set.seed(5) >? mat1<-matrix(sample(c(1:9,NA),20,replace=TRUE),ncol=5) >? rowleyi<-data.frame(mat1) >? co.var<-function(x) 100*(sd(x,na.rm=TRUE)/mean(x,na.rm=TRUE)) >? rowleyi<-data.frame(subspecies=rep(LETTERS[1:2],2),rowleyi) > > > with(rowleyi,aggregate(cbind(X1,X2,X3,X4,X5),by=list(subspecies),function(x) co.var(x))) >? Group.1? ? ? X1? ? ? ? X2? ? ? X3? ? ? X4? ? ? X5 > 1? ? ? A? ? ? NA 70.710678? ? ? NA 20.20305 28.28427 > 2? ? ? B 56.56854? 8.318903 60.60915 47.14045? 0.00000 > > > With your aggregate() > aggregate(.~subspecies,data=rowleyi,co.var) > #? subspecies? ? ? X1? ? ? X2? ? ? X3? ? ? X4 X5 > #1? ? ? ? ? B 56.56854 8.318903 60.60915 47.14045? 0 > > A.K. > > > > > ----- Original Message ----- > From: Amanda Jones <akjones82 at gmail.com> > To: r-help at r-project.org > Cc: > Sent: Monday, November 19, 2012 4:01 PM > Subject: [R] Coefficient of Variation, NA, Aggregate > > Hello helpers, > > I have a two part issue. FIRSTLY, I am attempting to write a function > for coefficient of variation, using > >> co.var <- function(rowleyi) ( 100*sd(rowleyi)/mean(rowleyi) )? #where rowleyi is my data set, which has multiple columns and rows of data. > > This is not working because some of my columns have NAs. When I try to use > >> co.var(rowleyi$TL, na.rm=TRUE)? #where TL is one of my column names, it gives me an error message: > > Error in co.var(rowleyi$TL, na.rm = TRUE) : >? unused argument(s) (na.rm = TRUE) > > I do not know what this means. How can I get this function to work? > SECONDLY, how can I then get that function to work within an > aggragate? Do I still use > >>aggregate(. ~ subspecies, data = rowleyi, CV, na.rm=TRUE) #where subspecies is the header for rows? This has worked for mean, std.error, sd, etc. > > Thank you! > Amanda Jones > > ______________________________________________ > 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. >
Hello, Just a note, you can (should?) have an argument na.rm in your function definition with a small modification, like this: co.var <- function(x,na.rm=TRUE) 100*(sd(x,na.rm=na.rm)/mean(x,na.rm=na.rm)) Then you can choose to use the default TRUE or not. Hope this helps, Rui Barradas Em 19-11-2012 22:50, Amanda Jones escreveu:> Fantastic, thank you! > > On Mon, Nov 19, 2012 at 3:44 PM, arun <smartpink111 at yahoo.com> wrote: >> HI, >> >> Your example dataset is in unreadable format. You could use dput(). >> set.seed(5) >> mat1<-matrix(sample(c(1:9,NA),20,replace=TRUE),ncol=5) >> rowleyi<-data.frame(mat1) >> co.var<-function(x) 100*(sd(x,na.rm=TRUE)/mean(x,na.rm=TRUE)) >> rowleyi<-data.frame(subspecies=rep(LETTERS[1:2],2),rowleyi) >> >> >> with(rowleyi,aggregate(cbind(X1,X2,X3,X4,X5),by=list(subspecies),function(x) co.var(x))) >> Group.1 X1 X2 X3 X4 X5 >> 1 A NA 70.710678 NA 20.20305 28.28427 >> 2 B 56.56854 8.318903 60.60915 47.14045 0.00000 >> >> >> With your aggregate() >> aggregate(.~subspecies,data=rowleyi,co.var) >> # subspecies X1 X2 X3 X4 X5 >> #1 B 56.56854 8.318903 60.60915 47.14045 0 >> >> A.K. >> >> >> >> >> ----- Original Message ----- >> From: Amanda Jones <akjones82 at gmail.com> >> To: r-help at r-project.org >> Cc: >> Sent: Monday, November 19, 2012 4:01 PM >> Subject: [R] Coefficient of Variation, NA, Aggregate >> >> Hello helpers, >> >> I have a two part issue. FIRSTLY, I am attempting to write a function >> for coefficient of variation, using >> >>> co.var <- function(rowleyi) ( 100*sd(rowleyi)/mean(rowleyi) ) #where rowleyi is my data set, which has multiple columns and rows of data. >> This is not working because some of my columns have NAs. When I try to use >> >>> co.var(rowleyi$TL, na.rm=TRUE) #where TL is one of my column names, it gives me an error message: >> Error in co.var(rowleyi$TL, na.rm = TRUE) : >> unused argument(s) (na.rm = TRUE) >> >> I do not know what this means. How can I get this function to work? >> SECONDLY, how can I then get that function to work within an >> aggragate? Do I still use >> >>> aggregate(. ~ subspecies, data = rowleyi, CV, na.rm=TRUE) #where subspecies is the header for rows? This has worked for mean, std.error, sd, etc. >> Thank you! >> Amanda Jones >> >> ______________________________________________ >> 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. >> > ______________________________________________ > 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.