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.