On 7/2/08, Karin Lagesen <[EMAIL PROTECTED]> wrote: > > > I have a data matrix like this: > > > > data[1:10,] > aaname grp cluster count > 1 Ala All Singleton 432 > 2 Arg All Singleton 1239 > 3 Asn All Singleton 396 > 4 Asp All Singleton 152 > 5 Cys All Singleton 206 > 6 Gln All Singleton 370 > 7 Glu All Singleton 211 > 8 Gly All Singleton 594 > 9 His All Singleton 213 > 10 Ile All Singleton 44 > > where the cluster column has three levels. > > > levels(data$cluster) > [1] "Array" "Singleton" "rRNA" > > > > Now, I would like to plot this like this: > > barchart(aaname~count|grp, group = cluster, data = data, stack = TRUE) > > I am thus using the cluster as the grouping. > > I would like to plot the relative abundance within each grouping, such > that the max level in my plot always is one (or 100). This would for > instance mean for the Ala in the All grp that the Singleton cluster > consitute lets say 40% of the Ala in the All grp, wheras the Singleton > and rRNA makes up 20% each. In this case I would get in my plot a > Singleton stretching to 40%, whereas the other two would be 20% each, > all in all making 100%. > > I am uncertain of whether I am managing to describe what I want, so I > hope somebody understands what I want!
So you basically need to compute the sum(count) within clusters, and divide by those counts. Consider using ave(). For example: > foo <- data.frame(g = gl(3, 3), count = rpois(9, lambda=20)) > foo g count 1 1 14 2 1 16 3 1 20 4 2 21 5 2 24 6 2 16 7 3 15 8 3 24 9 3 12 > with(foo, ave(count, g, FUN = sum)) [1] 50 50 50 61 61 61 51 51 51 > foo$gsum <- with(foo, ave(count, g, FUN = sum)) > foo g count gsum 1 1 14 50 2 1 16 50 3 1 20 50 4 2 21 61 5 2 24 61 6 2 16 61 7 3 15 51 8 3 24 51 9 3 12 51 -Deepayan ______________________________________________ R-help@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.