Re: compress lists with mean for equal elements

*To*: mathgroup at smc.vnet.net*Subject*: [mg101016] Re: [mg100987] compress lists with mean for equal elements*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Sun, 21 Jun 2009 07:04:14 -0400 (EDT)*References*: <200906200046.UAA00844@smc.vnet.net>

On 20 Jun 2009, at 09:46, vJD wrote: > I have a nested list of this form: > > {{{1, 13}, 97.6493}, {{1, 13}, 97.9511}, {{1, 14}, 99.3002}, {{1, 14}, > 99.4602}, {{1, 14}, 99.6193}, {{1, 15}, 100.513}, {{1, 15}, 101.149}, > {{1, 15}, 101.483}, {{1, 15}, 101.494}, {{1, 16}, 101.51}, {{1, 16}, > 101.895}} > > I want to shrink the list in the way that I calculate the mean over > the second part for all elements where the first part is equal. so > e.g. the first element of the new list will be {{1,13}, 97.8002}, > because they both have {1,13} and the mean of 97.6493 and 97.9511 is > 97.8002. > > The problem is that there is no fixed number for the equal elements > (so e.g. two elements with {1,13}, three elements with {1,14} and so > on). The number is random. > > Can anybody please provide me with a statement or hint how to > accomplish that task. > > Thank you very much > > Regards, > Holger > In Mathematica 7 you can do this with: ls={{{1, 13}, 97.6493}, {{1, 13}, 97.9511}, {{1, 14}, 99.3002}, {{1, 14}, 99.4602}, {{1, 14}, 99.6193}, {{1, 15}, 100.513}, {{1, 15}, 101.149}, {{1, 15}, 101.483}, {{1, 15}, 101.494}, {{1, 16}, 101.51}, {{1, 16}, 101.895}} ({#1[[1, 1]], Mean[#1[[All, 2]]]} & ) /@ GatherBy[ls, First] {{{1, 13}, 97.80019999999999}, {{1, 14}, 99.4599}, {{1, 15}, 101.15975}, {{1, 16}, 101.7025}} Andrzej Kozlowski

**References**:**compress lists with mean for equal elements***From:*vJD <ephorie@gmail.com>