Dear all, I'd like to get a percentage variable based on a group, but without creating a new data frame. For example: data(iris) iris$percent <-unlist(tapply(iris$Sepal.Length,iris$Species,function(x) x/sum(x, na.rm=TRUE))) This does not work, I should have only three standard values, respectively for setosa, versicolor, and virginica. How can I do this? MANY THANKS, Karine [[alternative HTML version deleted]]
HI, Not sure if this is what you meant. tapply(iris$Sepal.Length,iris$Species,FUN=function(x) sum(x)/sum(iris$Sepal.Length)*100) ?#? setosa versicolor? virginica ?# 28.55676?? 33.86195?? 37.58129 A.K. ----- Original Message ----- From: Karine Charlebois <karine.charlebois at outlook.com> To: "r-help at r-project.org" <r-help at r-project.org> Cc: Sent: Tuesday, January 15, 2013 9:30 PM Subject: [R] Get a percent variable based on group Dear all, I'd like to get a percentage variable based on a group, but without creating a new data frame. For example: data(iris) iris$percent <-unlist(tapply(iris$Sepal.Length,iris$Species,function(x) x/sum(x, na.rm=TRUE))) This does not work, I should have only three standard values, respectively for setosa, versicolor, and virginica. How can I do this? MANY THANKS, Karine ??? ??? ??? ? ??? ??? ? ??? [[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.
On Jan 15, 2013, at 6:30 PM, Karine Charlebois wrote:> Dear all, I'd like to get a percentage variable based on a group, but without creating a new data frame. > For example: > data(iris) > > iris$percent <-unlist(tapply(iris$Sepal.Length,iris$Species,function(x) x/sum(x, na.rm=TRUE)))A percentage is 100 times a fraction whose nominal value is unity. My guess is that you want a percentage of the group mean? So this would just be: iris$percent <-ave(iris$Sepal.Length, iris$Species, FUN=function(x) 100*x/mean(x, na.rm=TRUE)) head(iris)> > This does not work, I should have only three standard values, respectively for setosa, versicolor, and virginica. How can I do this?If you just want three values, then I do not see how these are percentages.> tapply(iris$Sepal.Length,iris$Species,function(x) mean(x, na.rm=TRUE))setosa versicolor virginica 5.006 5.936 6.588 -- David Winsemius Alameda, CA, USA
Hi, Is it this? aggregate(iris$Sepal.Length,by=list(iris$Species),FUN=function(x) sum(x)/sum(iris$Sepal.Length)*100) ???? Group.1??????? x 1???? setosa 28.55676 2 versicolor 33.86195 3? virginica 37.58129 A.K. ________________________________ From: Karine Charlebois <karine.charlebois at outlook.com> To: arun <smartpink111 at yahoo.com> Sent: Tuesday, January 15, 2013 10:22 PM Subject: RE: [R] Get a percent variable based on group For example,? iris$percent <- unlist(tapply(iris$Sepal.Length,iris$Species,function(x) x/sum(iris$Sepal.Length, na.rm=TRUE))) aggregate(iris$percent, by=list(iris$Species), FUN=sum, na.rm=TRUE) this last command should return 100% for each specie, not the following values: Group.1???????? x 1???? setosa 0.2855676 2 versicolor 0.3386195 3? virginica 0.3758129 ________________________________ From: karine.charlebois at outlook.com To: smartpink111 at yahoo.com Subject: RE: [R] Get a percent variable based on group Date: Tue, 15 Jan 2013 22:13:27 -0500 No, it is not. I need a new column with these values. Karine> Date: Tue, 15 Jan 2013 19:11:22 -0800 > From: smartpink111 at yahoo.com > Subject: Re: [R] Get a percent variable based on group > To: karine.charlebois at outlook.com > CC: r-help at r-project.org > > > > HI, > > Not sure if this is what you meant. > tapply(iris$Sepal.Length,iris$Species,FUN=function(x) sum(x)/sum(iris$Sepal.Length)*100) > ?#? setosa versicolor? virginica > ?# 28.55676?? 33.86195?? 37.58129 > A.K. > > > ----- Original Message ----- > From: Karine Charlebois <karine.charlebois at outlook.com> > To: "r-help at r-project.org" <r-help at r-project.org> > Cc: > Sent: Tuesday, January 15, 2013 9:30 PM > Subject: [R] Get a percent variable based on group > > Dear all, I'd like to get a percentage variable based on a group, but without creating a new data frame. > For example: > data(iris) > > iris$percent <-unlist(tapply(iris$Sepal.Length,iris$Species,function(x) x/sum(x, na.rm=TRUE))) > > This does not work, I should have only three standard values, respectively for setosa, versicolor, and virginica. How can I do this? > > MANY THANKS, > > Karine > ??? ???????? ?????? ??? ? > ??? [[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. >
As others have said, your goal is unclear to us. However, one guess I have not
seen others make is if you are looking for a way to normalize within each group,
perhaps you should look at
?ave
which typically creates a vector just as long as your data vector and grouping
vector.
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live
Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.
Karine Charlebois <karine.charlebois at outlook.com> wrote:
>Dear all, I'd like to get a percentage variable based on a group, but
>without creating a new data frame.
>For example:
>data(iris)
>
>iris$percent <-unlist(tapply(iris$Sepal.Length,iris$Species,function(x)
>x/sum(x, na.rm=TRUE)))
>
>This does not work, I should have only three standard values,
>respectively for setosa, versicolor, and virginica. How can I do this?
>
>MANY THANKS,
>
>Karine
>
> [[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.