# Ecco che cosa sta dietro a quanto ottenuto richiamando daticlas.txt.
#
# Se dispongo di dati già classificati, in intervalli di diversa ampiezza,
# come i seguenti, relativi alla distribuzione dell'età dei morti in Italia
# nel 1951: negli intervalli di età [0,5), [5,10), [10,20), [20,30), [30,40),
# [40,50), [50,60), [60,75), [75,100) sono morte 729, 35, 77, 132, 134, 285,
# 457, 1401, 1569 migliaia di persone,  basta che compili le prime due righe
# seguenti:
mor <- c(729,35,77,132,134,285,457,1401,1569)
interv <- c(0,5,10,20,30,40,50,60,75,100)  # un dato in piu' di freq
totale <- sum(mor); fr_perc <- mor/totale*100; fr_perc
[1] 15.1276198  0.7262918  1.5978419  2.7391575  2.7806599  5.9140901  9.4832953
[8] 29.0724217 32.5586221
# Per arrotondare portando i dati 0.7262... a 0.73 posso usare:
print(fr_perc,digits=2)
[1] 15.13  0.73  1.60  2.74  2.78  5.91  9.48 29.07 32.56
# Poi copio le righe seguenti (senza preoccuparmi dei dettagli):
# datiN trasforma una popolaz. di dati (pop) classificati in intervalli (int)
# in N=100mila dati singoli a cui applicare poi i comandi standard di R
datiN <- function(pop,int) { N <- 1e5;
  tot <- sum(pop); fr_perc <- pop/tot*100; rap <- N/sum(pop); fr <- pop*rap;
  n <- length(fr); dat <- c(seq(int[1],int[2],by=(int[2]-int[1])/fr[1]));
  for (i in 2:n) {dat <- c(dat,seq(int[i],int[i+1],by=(int[i+1]-int[i])/fr[i]))}; dat}
dati <- datiN(mor,interv)
# sono intervalli aperti a destra:
hist(dati,interv,right=FALSE)

# variante:
hist(dati,interv,right=FALSE,ylim=c(0,0.035),main="",xlab="")
abline(h=c(0.01,0.02,0.03), lty=3)

# altre possibilità di etichettatura
hist(dati,interv,right=FALSE,col="yellow",axes=FALSE)
axis(1,pos=0,col="blue",label=TRUE, at=c(0,5,10,20,30,40,50,60,75,100))
axis(2,pos=0,col="blue",label=TRUE, at=c(0.005,0.01,0.015,0.02,0.025,0.03))

#
summary(dati)
   Min.  1st Qu.  Median   Mean  3rd Qu.   Max. 
   0.00   43.43   66.00   58.32   80.80  100.00
# essendo dati approssimati conviene che li arrotondi agli interi
# (43, 66, 58, 81) o ai decimi (43.4, 66.0, 58.3, 80.8)
plot(ecdf(dati))