Skip to content

trying ti use a function in aggregate

1 message · arun

#
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.