If you have postgresql on hand, then it's as easy as :
create table data(
month text,
zone integer,
replicate integer,
speciesa integer,
speciesb integer,
speciesc integer);
copy data from stdin with delimiter ',';
sept,1,1,5,10,15
Sept,1,2,0,5,10
Sept,1,3,5,0,5
Sept,2,1,5,5,5
Sept,2,2,10,15,10
Sept,2,3,0,0,5
\.
select month, zone, replicate, avg(speciesa), stddev(speciesa) from da
+ta group by month,zone, replicate;
month | zone | replicate | avg | stddev
-------+------+-----------+------------------------+--------
Sept | 1 | 2 | 0.00000000000000000000 |
Sept | 2 | 3 | 0.00000000000000000000 |
Sept | 1 | 3 | 5.0000000000000000 |
Sept | 2 | 2 | 10.0000000000000000 |
sept | 1 | 1 | 5.0000000000000000 |
Sept | 2 | 1 | 5.0000000000000000 |
(6 lignes)
libremen.com : legal case, contract and insurance claim management software