Re: Summing list subsets
- To: mathgroup at smc.vnet.net
- Subject: [mg30804] Re: Summing list subsets
- From: Ignacio Rodriguez <ignacio at sgirmn.pluri.ucm.es>
- Date: Wed, 19 Sep 2001 00:16:45 -0400 (EDT)
- Organization: UCM
- References: <9ncfgn$prb$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Try the following
Mixer[x_List,y_List]:=Table[{Part[x,i],{Part[y,i]}},{i,1,Length[x]}] /;
Length[x]==Length[y]
Compacter[x_]:=ReplaceRepeated[x,{a___,{b_,{c__}},d___,{b_,{e__}},f___}->{a,{b,{c,e}},d,f}];
Applier[f_,x_]:=Table[{Part[x,i,1],Apply[f,Part[x,i,2]]},{i,1,Length[x]}];
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}
t1=Mixer[x,y]
t2=Compacter[t1]
z=Applier[Plus,t2]
Mark Coleman wrote:
> 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
--
Ignacio Rodriguez Ramirez de Arellano
Unidad de RMN
Universidad Complutense
Paseo Juan XXIII, 1
Madrid 28040, Spain
Tel. 34-91-394-3288
Fax 34-91-394-3245
e-mail: ignacio at sgirmn.pluri.ucm.es