[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