Hi: Using the result of xtabs, use prop.table():
Example: df <- data.frame ( x1 = ceiling( runif( 20 ) * 3 ), x2 = ceiling( runif( 20 ) * 2 ), y = round( runif( 20 ) ) ) # Get different numbers since your random seed was not specified... (w <- with(df, xtabs(~ y + x1 + x2))) , , x2 = 1 x1 y 1 2 3 0 1 1 1 1 1 1 1 , , x2 = 2 x1 y 1 2 3 0 1 4 2 1 3 2 2 >class(w) # [1] "xtabs" "table" dim(w) # [1] 2 3 2 > prop.table(w, c(2, 3)) # Column proportions , , x2 = 1 x1 y 1 2 3 0 0.5000000 0.5000000 0.5000000 1 0.5000000 0.5000000 0.5000000 , , x2 = 2 x1 y 1 2 3 0 0.2500000 0.6666667 0.5000000 1 0.7500000 0.3333333 0.5000000 > prop.table(w, c(1, 3)) # Row proportions , , x2 = 1 x1 y 1 2 3 0 0.3333333 0.3333333 0.3333333 1 0.3333333 0.3333333 0.3333333 , , x2 = 2 x1 y 1 2 3 0 0.1428571 0.5714286 0.2857143 1 0.4285714 0.2857143 0.2857143 HTH, Dennis On Sun, Apr 18, 2010 at 4:50 PM, Jeff Brown <dopethatwantsc...@yahoo.com>wrote: > > Hi, > > xtabs() creates a table of counts. I want a table of proportions -- that > is, I want to divide every vector (along a particular dimension) by its > sum. > > The tiny example below does that. The call to xtabs() creates a matrix "A" > with dimensions ("x1","x2","y"). I transform "A" using aperm() and aaply() > to get the matrix "B". The problem: "B" has dimensions (<No name>, "x2", > "x1"). How can I give (back) the name "y" to the dimension with no name in > the matrix "B"? (Unless I misunderstand something, dimnames() won't do it > -- that lets me name the rows in a given dimension, but not the dimension > itself.) > > > df <- data.frame ( > + x1 = ceiling( runif( 20 ) * 3 ), > + x2 = ceiling( runif( 20 ) * 2 ), > + y = round( runif( 20 ) ) > + ) > > > > attach( df ) > > ( A <- xtabs( ~ y + x1 + x2 ) ) > , , x2 = 1 > > x1 > y 1 2 3 > 0 2 3 2 > 1 0 2 0 > > , , x2 = 2 > > x1 > y 1 2 3 > 0 3 2 2 > 1 0 3 1 > > > detach(df) > > ( B <- aperm( aaply( A, 2:3, function (row) row / sum(row) ), c(3,1,2) ) > ) > , , x2 = 1 > > x1 > 1 2 3 > 0 1 0.6 1 > 1 0 0.4 0 > > , , x2 = 2 > > x1 > 1 2 3 > 0 1 0.4 0.6666667 > 1 0 0.6 0.3333333 > > > dimnames(B) > [[1]] # This is the line > that's bothering me. > [1] "0" "1" > > $x1 > [1] "1" "2" "3" > > $x2 > [1] "1" "2" > > If there's an easier way to get xtabs() to provide proportions instead of > counts, I'd like to know that, too. But whether there is or is not, I'd > like to know how to name a dimension. > > Thanks a lot, > Jeff > -- > View this message in context: > http://n4.nabble.com/xtabs-of-proportions-and-naming-a-dimension-not-a-row-tp2015261p2015261.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. > [[alternative HTML version deleted]] ______________________________________________ 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.