MathGroup Archive 2002

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

Search the Archive

Re: grouping and averaging {x,y} pairs of data

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37238] Re: grouping and averaging {x,y} pairs of data
  • From: daiyanh at earthlink.net (Daitaro Hagihara)
  • Date: Fri, 18 Oct 2002 05:16:55 -0400 (EDT)
  • References: <aokc56$ah2$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

In article <aokc56$ah2$1 at smc.vnet.net>, "David E. Burmaster" 
<deb at alceon.com> wrote:

>Dear Fellows in MathGroup,
>
>I have a list of 17,000+ {x,y} pairs of data
>
>        each x value is a positive integer from 1 to 100+
>
>        each y value is a positive real number
>
>As a *short* example, let's consider:
>
> data = {{3,1},{4,3},{3,2},{1,10},{4,2},{1,6},{5,2},{2,5},{7,1}}
>
>I want to group the data by the x value and report the arithmetic average
>of the y values in each group.
>
>For the example, i want to report:
>
> output = {{1,8},{2,5},{3,1.5},{4,2.5},{5,2},{6,0},{7,1}}
>
>In this example, x=6 does not occur so i report the average y[6] = 0.
>
>Can anyone suggest a way to do this efficiently?/



Block[{data = {{3,1},{4,3},{3,2},{1,10},{4,2},{1,6},
               {5,2},{2,5},{7,1}},
       sd = Table[{0,0.},{10}]},
  Off[Infinity::indet];
  Off[General::dbyz];
  (sd[[#[[1]],2]]++;sd[[#[[1]],1]]+=#[[2]])&/@data;
  sd=MapIndexed[{#2[[1]],Divide@@#}&,sd];
  On[Infinity::indet];
  On[General::dbyz];
  sd/.Indeterminate->0.]

-->
{{1, 8.}, {2, 5.}, {3, 1.5}, {4, 2.5}, {5, 2.}, {6, 0.}, 
 {7, 1.}, {8, 0.}, {9, 0.}, {10, 0.}}

This makes 3 linear passes overall on the data.  For
large data sets, that may be a problem.

DH


  • Prev by Date: Get rid of unwanted {}
  • Next by Date: Re: List processing
  • Previous by thread: RE: grouping and averaging {x,y} pairs of data
  • Next by thread: Re: grouping and averaging {x,y} pairs of data