I've done this a few different ways. #1 is most powerful, my preferred method these days as long as data volume / processing time isn't a problem. But it requires another software package to be installed. #2 is the most portable solution, using tools programs you probably already have. #3 creates exactly what you want with one command, but is a custom local command here with no documentation yet and very little testing - having said that, I'm quite willing to share if you can be patient.
Also note that similar questions have been asked on this list in the past, and if you haven't already, do a search of the archives, there are probably more possiblities than I list here...
(1) Use Roger Bivand's GRASS/R interface. Very elegant and enables much more. Start GRASS, set region etc, then start R, read in the elevation map and the clump map, then use the tapply() function in R to get averages of elevation in each clump. There is more learning curve in this than some other solutions, but if like me you already use R, no problem. See www.R-project.org for info on R, and ftp://sunsite.ualberta.ca/pub/Mirror/grass-web/statsgrass/index.html#grassR (or equivalent URL at GRASS mirror of your choice) for info on the interface.
(2) Use r.average as you've said, the problem is that it produces a map not a table - so for one project I created a temporary raster of the averages, then used r.stats (&/or r.cats if necessary depending on the data) and some unix text processing utilities to print out a table of the values that are produced in the raster. Also possible (and for other statistics) with r.statistics. These used to be integer-only tools, I think, perhaps they've been updated ? If this much detail doesn't make sense to you, contact me directly and I can dig up some old example scripts I used to do this.
(3) We developed our own program in the lab here, back in grass4.3 days, which I now call "r.polystats", and I have it working in grass5. The advantage is that it does produce text tables by default as opposed to maps (which are also an option).
The problem is that I haven't updated it to work with floating point data yet. Also, it has next to no documentation and the grass5 version isn't tested by anyone besides myself yet. However, if after looking at all the options this still sounds interesting to you and you're willing to compile software, let me know and we can talk about getting it on your system.
Cheers,
Scott Mitchell
smitch at geog.utoronto.ca
On Wednesday, November 20, 2002, at 12:09 PM, Thomas Dewez wrote:
Dear all,
I am struggling on how to extract statistics from clumps of data. I
have a layer containing clumps ID and I would like to obtain an ascii
output of the average elevation of those clumps.
Is there a command that does this?
r.average was used to compute the average value of each clump.
The problem is simply to report the value contained in one layer
while looking up the category value in another layer. The report
would look something like this:
clump1, value...
clump2, value...
...