Alexandre, bom dia!

Segue uma sugestão,

### <code r>
require(vegan)

{
     set.seed(765) ### pra reprodutibilidade!
     
     # Matriz das espécies 
     spdf <- matrix(NA, 60, 4, dimnames = 
                     list(1:60, c("sp1", "sp2", "sp3", "sp4"))) 
     spdf <- as.data.frame(spdf) 
     
     # Adicionado ruído 
     eff <- sort(rep(1:6, 10)) 
     spdf$sp1 = eff + rnorm(60, 0, 0.25) 
     spdf$sp2 = eff + rnorm(60, 0, 0.25) 
     spdf$sp3 = eff + rnorm(60, 0, 0.25) 
     spdf$sp4 = eff + rnorm(60, 0, 0.25) 
     
     # Tratamentos 
     trat <- gl(3, 20, labels = paste("t", 1:3, sep="")) 
     
     #Repetições 
     rept<-rep(1:20,3)
}

#Juntando tratamentos e repetições 
trat_r<-paste(trat,rept,sep="_") 

pts.spc<-cbind(trat_r,spdf) 
rownames(pts.spc) = pts.spc[,1] 
pts.spc<-pts.spc[,-(1)] 
head(pts.spc) 

# Calcula distância de bray-curtis entre amostras 
pts.spc.dist <- vegdist(pts.spc, method = "bray") 

#Agrupamento de comunidades usando o algorítimo average-linkage 
pts.spc.clust <- hclust(pts.spc.dist, method = "average")

# Diagrama de cluster 
plot(pts.spc.clust, ylab = "Dissimilaridade") 

# --- Dissimilaridade média --- #
str(pts.spc.clust)
res <- data.frame(lab=pts.spc.clust$labels, height=c(0, pts.spc.clust$height))
res$trat <- as.factor(sub("_.*$", "", res$lab))
head(res)
tapply(res$height, res$trat, mean)
#         t1         t2         t3 
# 0.01395473 0.03670206 0.13605946 

</code>


Éder Comunello <comunello.eder@gmail.com>
Dourados, MS - [22 16.5'S, 54 49'W]