Message-ID: <1351190977.62258.YahooMailNeo@web142606.mail.bf1.yahoo.com>
Date: 2012-10-25T18:49:37Z
From: arun
Subject: trying ti use a function in aggregate
In-Reply-To: <332338580.22690640.1351183469591.JavaMail.root@umassd.edu>
Hi,
Try this:
dat1$Percent<-unlist(tapply(dat1$Count,list(dat1$Trip_id,dat1$CommonName),function(x) x/sum(x)))
head(dat1)
#? Trip_id?? Vessel?? CommonName Length Count??? Percent
#1???? 230 Sunlight ShadAmerican???? 19???? 1 0.01408451
#2???? 230 Sunlight ShadAmerican???? 20???? 1 0.01408451
#3???? 230 Sunlight ShadAmerican???? 21???? 1 0.02816901
#4???? 230 Sunlight ShadAmerican???? 23???? 1 0.05633803
#5???? 230 Sunlight ShadAmerican???? 26???? 1 0.22535211
#6???? 230 Sunlight ShadAmerican???? 27???? 1 0.30985915
I also have a doubt from your first email.
?"I am trying to use the aggregate function to
calculate the percent at length for each Trip_id and CommonName. "
So, I am thinking you need the percentage of "length".? If that is the case,
res1<-with(dat1,aggregate(Count,by=list(Trip_id=Trip_id,CommonName=CommonName),function(x) length(x)))
library(plyr)
res1$Percent<-ddply(res1,.(Trip_id),summarize,x/sum(x))[,2]
?res1
#? Trip_id????? CommonName? x Percent
#1???? 230???????? Alewife 11??? 0.44
#2???? 230 HerringBlueback? 4??? 0.16
#3???? 230??? ShadAmerican 10??? 0.40
#4???? 231??? ShadAmerican? 5??? 1.00
?A.K.
________________________________
From: Sally A Roman <sroman at umassd.edu>
To: arun <smartpink111 at yahoo.com>
Sent: Thursday, October 25, 2012 12:44 PM
Subject: Re: [R] trying ti use a function in aggregate
Thank you for your help.? Your code does what I need it to, but the output that I need is
Trip_id, Vessel, CommonName, Length, Percent.? When I run your functions there is no length output.? Do you have any suggestions on how to get the Length variable into the output?
Thanks again- Sally
________________________________
From: "arun" <smartpink111 at yahoo.com>
To: "Sally_roman" <sroman at umassd.edu>
Cc: "R help" <r-help at r-project.org>
Sent: Thursday, October 25, 2012 12:04:23 PM
Subject: Re: [R] trying ti use a function in aggregate
Hi,
May be this helps:
dat1<-read.table(text="
?Trip_id????????? Vessel????? CommonName Length Count
1????? 230??????? Sunlight??? ShadAmerican??? 19??? 1
2????? 230??????? Sunlight??? ShadAmerican??? 20??? 1
3????? 230??????? Sunlight??? ShadAmerican??? 21??? 1
4????? 230??????? Sunlight??? ShadAmerican??? 23??? 1
5????? 230??????? Sunlight??? ShadAmerican??? 26??? 1
6????? 230??????? Sunlight??? ShadAmerican??? 27??? 1
7????? 230??????? Sunlight??? ShadAmerican??? 30??? 2
8????? 230??????? Sunlight??? ShadAmerican??? 33??? 1
9????? 230??????? Sunlight??? ShadAmerican??? 34??? 1
10??? 230??????? Sunlight??? ShadAmerican??? 37??? 1
11??? 230??????? Sunlight HerringBlueback??? 20??? 1
12??? 230??????? Sunlight HerringBlueback??? 21??? 2
13??? 230??????? Sunlight HerringBlueback??? 22??? 5
14??? 230??????? Sunlight HerringBlueback??? 26??? 1
15??? 230??????? Sunlight????????? Alewife??? 17??? 1
16??? 230??????? Sunlight????????? Alewife??? 18??? 1
17??? 230??????? Sunlight????????? Alewife??? 20??? 2
18??? 230??????? Sunlight????????? Alewife??? 21??? 4
19??? 230??????? Sunlight????????? Alewife??? 22??? 16
20??? 230??????? Sunlight????????? Alewife??? 23??? 22
21??? 230??????? Sunlight????????? Alewife??? 24??? 16
22??? 230??????? Sunlight????????? Alewife??? 25??? 4
23??? 230??????? Sunlight????????? Alewife??? 26??? 1
24??? 230??????? Sunlight????????? Alewife??? 27??? 2
25??? 230??????? Sunlight????????? Alewife??? 28??? 2
26??? 231 Western_Venture??? ShadAmerican??? 23??? 1
27??? 231 Western_Venture??? ShadAmerican??? 24??? 1
28??? 231 Western_Venture??? ShadAmerican??? 25??? 1
29??? 231 Western_Venture??? ShadAmerican??? 28??? 2
30??? 231 Western_Venture??? ShadAmerican??? 29??? 2
",sep="",header=TRUE,stringsAsFactors=FALSE)
with(dat1,aggregate(Count,by=list(Trip_id=Trip_id,Species=CommonName),function(x) x/sum(x)))
? Trip_id???????? Species
1???? 230???????? Alewife
2???? 230 HerringBlueback
3???? 230??? ShadAmerican
4???? 231??? ShadAmerican
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? x
#1 0.01408451, 0.01408451, 0.02816901, 0.05633803, 0.22535211, 0.30985915, 0.22535211, 0.05633803, 0.01408451, 0.02816901, 0.02816901
#2???????????????????????????????????????????????????????????????????????????????????????? 0.1111111, 0.2222222, 0.5555556, 0.1111111
#3???????????? 0.09090909, 0.09090909, 0.09090909, 0.09090909, 0.09090909, 0.09090909, 0.18181818, 0.09090909, 0.09090909, 0.09090909
#4????????????????????????????????????????????????????????????????????????????? 0.1428571, 0.1428571, 0.1428571, 0.2857143, 0.2857143
#or
library(plyr)
res<-ddply(dat1,.(Trip_id=Trip_id,Vessel=Vessel,CommonName=CommonName), summarize, Count/sum(Count))
colnames(res)[4]<-"value"
head(res)
#? Trip_id?? Vessel CommonName????? value
#1???? 230 Sunlight??? Alewife 0.01408451
#2???? 230 Sunlight??? Alewife 0.01408451
#3???? 230 Sunlight??? Alewife 0.02816901
#4???? 230 Sunlight??? Alewife 0.05633803
#5???? 230 Sunlight??? Alewife 0.22535211
#6???? 230 Sunlight??? Alewife 0.30985915
A.K.
----- Original Message -----
From: Sally_roman <sroman at umassd.edu>
To: r-help at r-project.org
Cc:
Sent: Thursday, October 25, 2012 10:19 AM
Subject: [R] trying ti use a function in aggregate
Hi -I am using R v 2.13.0.? I am trying to use the aggregate function to
calculate the percent at length for each Trip_id and CommonName.? Here is a
small subset of the data.?
? ?Trip_id? ? ? ? ? Vessel? ? ? ?CommonName Length Count
1? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?19? ? ?1
2? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?20? ? ?1
3? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?21? ? ?1
4? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?23? ? ?1
5? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?26? ? ?1
6? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?27? ? ?1
7? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?30? ? ?2
8? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?33? ? ?1
9? ? ? 230? ? ? ? Sunlight? ? Shad,American? ? ?34? ? ?1
10? ? ?230? ? ? ? Sunlight? ? Shad,American? ? ?37? ? ?1
11? ? ?230? ? ? ? Sunlight Herring,Blueback? ? ?20? ? ?1
12? ? ?230? ? ? ? Sunlight Herring,Blueback? ? ?21? ? ?2
13? ? ?230? ? ? ? Sunlight Herring,Blueback? ? ?22? ? ?5
14? ? ?230? ? ? ? Sunlight Herring,Blueback? ? ?26? ? ?1
15? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?17? ? ?1
16? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?18? ? ?1
17? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?20? ? ?2
18? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?21? ? ?4
19? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?22? ? 16
20? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?23? ? 22
21? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?24? ? 16
22? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?25? ? ?4
23? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?26? ? ?1
24? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?27? ? ?2
25? ? ?230? ? ? ? Sunlight? ? ? ? ? Alewife? ? ?28? ? ?2
26? ? ?231 Western Venture? ? Shad,American? ? ?23? ? ?1
27? ? ?231 Western Venture? ? Shad,American? ? ?24? ? ?1
28? ? ?231 Western Venture? ? Shad,American? ? ?25? ? ?1
29? ? ?231 Western Venture? ? Shad,American? ? ?28? ? ?2
30? ? ?231 Western Venture? ? Shad,American? ? ?29? ? ?2
My code is:
myfun<-function (x) x/sum(x)
b<-with(data,aggregate(x=list(Percent=Count),by=list(Trip_id=Trip_id,Length=Length,Species=CommonName),
FUN="myfun"))
My issue is that the percent is not be calculated by Trip_id and CommonName.
The result is that each row has a percent of 1 indicating that myfun is not
dividing by the sum of counts with a Trip_id/CommonName group.? Any help
would be appreciated.
Thank you
--
View this message in context: http://r.789695.n4.nabble.com/trying-ti-use-a-function-in-aggregate-tp4647414.html
Sent from the R help mailing list archive at Nabble.com.
______________________________________________
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.