[R] xtabs() of proportions, and naming a dimension (not a row)

David Winsemius dwinsemius at comcast.net
Mon Apr 19 04:47:33 CEST 2010


On Apr 18, 2010, at 7:50 PM, Jeff Brown 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.

?prop.table

>
> 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) ) )

Would have been polite to include:

require(plyr)

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

 > dimnames(B) <- list(x0 = dimnames(B)[[1]], x4 = dimnames(B)[[2]],  
x5=dimnames(B)[[3]])
 > B
, , x5 = 1

    x4
x0  1   2   3
   0 1 0.5 0.6
   1 0 0.5 0.4

, , x5 = 2

    x4
x0          1 2 3
   0 0.5714286 0 0
   1 0.4285714 1 1

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

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list