Re: Summing over like elements
- To: mathgroup at smc.vnet.net
- Subject: [mg13875] Re: Summing over like elements
- From: lawry at maths.ox.ac.uk (James Lawry)
- Date: Wed, 2 Sep 1998 01:31:08 -0400
- Organization: Oxford Centre for Industrial & Applied Mathematics
- References: <6sdb8i$peq@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Mitchell Kaplan <qmak at pipeline.com> wrote:
>I have a 2 column array. Column 1 has some values, many of which are
>repeated. Column 2 has probabilities of these values.
>
>I would like to sum the probabilities for each unique element in column
>1. For example:
>
>{{1, .5} , {2, .2} , {1, .1}} should give me:
>
>{{1, .6} , {2, .2}}
>
>
>I'm sure I can do this with a "Do" loop -- however it seems that in
>general "Do's" are pretty innefficient.
>
>Does anyone have any suggestions?
Here is one way to do it:
f[list_] :=
Map[{#, Plus @@ Cases[list, {#, a_} -> a]}&,
Union[Transpose[list][[1]]]]
Here's another:
g[list_] :=
Sort[list, (#1[[1]] <= #2[[1]])&] //. {x___, {a_, b_}, {a_, c_},
y___} -> {x, {a, b+c}, y}
The first way is much faster.
James Lawry.