MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Counting Categories

  • To: mathgroup at smc.vnet.net
  • Subject: [mg96890] Re: [mg96798] Counting Categories
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Thu, 26 Feb 2009 08:02:06 -0500 (EST)
  • References: <200902250903.EAA15666@smc.vnet.net>
  • Reply-to: drmajorbob at bigfoot.com

If the lists are large, I suspect Tally will be fastest. In that case, you  
can get the contingency table this way:

colors = {red, yellow, green, blue};
sizes = {small, medium, large};
randomColor := RandomChoice@colors
randomSize := RandomChoice@sizes
pairs = Table[{randomColor, randomSize}, {50}];

Clear[count]
count[_] = 0;
Replace[Tally[pairs], {x_List, c_Integer} :> (count[x] = c), 1];
Table[count@{color, size}, {color, colors}, {size, sizes}]

{{5, 6, 5}, {3, 4, 5}, {5, 4, 6}, {4, 3, 0}}

The "count" function acts much like a sparse array here, without  
SparseArray's many limitations.

Bobby

On Wed, 25 Feb 2009 14:50:11 -0600, Gregory Lypny  
<gregory.lypny at videotron.ca> wrote:

> colors = {red, yellow, green, blue};
> sizes = {small, medium, large};
> randomColor := RandomChoice@colors
> randomSize := RandomChoice@sizes
> pairs = Table[{randomColor, randomSize}, {50}];
>  Partition[Count[pairs, #] & /@ Tuples[{colors, sizes}], Length@sizes]
>  {{5, 3, 3}, {3, 6, 3}, {8, 1, 2}, {5, 4, 7}}
>  or
>  Apply[Count[pairs, {##}, 1] &, Outer[List, colors, sizes], {2}]



-- 
DrMajorBob at longhorns.com


  • Prev by Date: Re: Map and functional constructs to replace iterative statements
  • Next by Date: Re: Map and functional constructs to replace iterative statements
  • Previous by thread: Re: Counting Categories
  • Next by thread: Re: Counting Categories