Re: Summing list subsets
- To: mathgroup at smc.vnet.net
- Subject: [mg30749] Re: [mg30711] Summing list subsets
- From: BobHanlon at aol.com
- Date: Sun, 9 Sep 2001 03:26:47 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
In a message dated 2001/9/8 3:15:03 AM, mcoleman at bondspace.com writes:
>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.
>
x = {a,a,b,b,b,b,c,d,d,d,d,d};
y = {1,1,2,2,2,2,3,4,4,4,4,4};
f[func_, x_?VectorQ, y_?VectorQ] :=
{#, func[Sequence@@(Cases[x, #] /.
Union[Thread[x :> y]])]}& /@
Union[x] /; Length[x] == Length[y] &&
Length[Union[x]] == Length[Union[Thread[x :> y]]];
f[Plus, x, y]
{{a, 2}, {b, 8}, {c, 3}, {d, 20}}
f[Times, x, y]
{{a, 1}, {b, 16}, {c, 3}, {d, 1024}}
Bob Hanlon
Chantilly, VA USA