MathGroup Archive 2001

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

Search the Archive

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