Re: Summing list subsets

• To: mathgroup at smc.vnet.net
• Subject: [mg30744] Re: Summing list subsets
• From: "Allan Hayes" <hay at haystack.demon.co.uk>
• Date: Sun, 9 Sep 2001 03:26:38 -0400 (EDT)
• References: <9ncfgn\$prb\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Mark,
Two suggestions:

This is the most versatile, allowing for arbitrary ordering and zeros and
cancelation in y.

x = {a,b,b,b,b,c,d,d,d,d,d,e,f,a};
y = {1,2,2,2,2,3,4,4,4,4,4,1,0,-1};

Aggregate[x_,y_, F_]:=
Apply[
{First[#1],F@@#2}&
,
Transpose/@
Split[
Sort[Transpose[{x,y}]],
First[#1]== First[#2]&
]
,
{1}
]

Aggregate[x,y,F]

{{a,F[-1,1]},{b,F[2,2,2,2]},{c,F[3]},{d,F[4,4,4,4,4]},{e,F[1]},{f,F[0]}}

This is quicker for your particular example, but does not allow for zeros
and cancellation in the

Replace[
Tr[x y]/.z_Plus:>List@@z,
x_. y_Symbol:> {x,y},
{1}
]

{{8,b},{3,c},{20,d},{1,e}}

--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565

"Mark Coleman" <mcoleman at bondspace.com> wrote in message
news:9ncfgn\$prb\$1 at smc.vnet.net...
> Greetings:
>
> Consider two lists:
>
> x = {a,a,b,b,b,b,c,d,d,d,d,d,} and  y = {1,1,2,2,2,2,3,4,4,4,4,4}
>
> I would like to have a function that returns the sum (or any other
function)
> of each unique element of x, given the corresponding value in y. That is,
> for a 'Sum', the result would be
>
> z={{a,2},{b,8},{c,3},{d,20}}
>
> This is similar in spirit to a common database aggregation problem.
>
> Any ideas?
>
> Thanks.
>
> -Mark
>
>

```

• Prev by Date: Re: Trigonometry, sine theorem.
• Next by Date: Re: Changing the default font to arial
• Previous by thread: Re: Summing list subsets
• Next by thread: Re: Summing list subsets