A aggregate() faz a mesma coisa de uma forma mais sofisticada.

aggregate(cbind(tcont,read)~sexo+idade,
          data=dados, FUN=sum)


Mais opções estão disponíveis com as funções do pacote plyr, como

require(plyr)
ddply(dados, .(sexo,idade), summarise,
      tcont=sum(tcont), read=sum(read))

onde você pode usar funções diferentes para cada variável ou até usar mais de uma vez uma mesma variável.

À disposição.
Walmes.

==========================================================================
Walmes Marques Zeviani
LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W)
Departamento de Estatística - Universidade Federal do Paraná
fone: (+55) 41 3361 3573
skype: walmeszeviani
homepage: http://www.leg.ufpr.br/~walmes
linux user number: 531218
==========================================================================