# Esaminiamo una tabella di dati classificati con didascalie
# per righe e colonne. Supponiamo, prima, che siano caricati da rete:
readLines("http://macosa.dima.unige.it/om/prg/stf/settsess.txt", n=14)
 [1] "Occupati in Italia nel 1991 per settore e sesso"       
 [2] "(frequenze in decine di migliaia)."                    
 [3] "E' la tabella di contingenza:"                         
 [4] "        B"                                             
 [5] "    117   66"                                          
 [6] " A  526  166"                                          
 [7] "    768  518"                                          
 [8] "A (righe): settore (1:primario, 2:secondario, 3:altro)"
 [9] "B (colonne): sesso (1:maschile, 2:femminile)"          
[10] "Carica con read.table(...,skip=10)"                    
[11] "primario secondario altro"                             
[12] "M 117 526 768"                                         
[13] "F  66 166 518"                                         
[14] ""  
dati <- read.table("http://macosa.dima.unige.it/om/prg/stf/settsess.txt", skip=10); dati
  primario secondario altro
M      117        526   768
F       66        166   518
#
# Ovviamente i dati, in questo caso, potrei introdurli direttamente:
nomi <- list(c("M","F"),c("primario","secondario","altro"))
u <- c(117,66,526,166,768,518); r <- 2; c <- 3
dati <- array(u,dim=c(r,c),dimnames=nomi); dati
# con lo stesso risultato:
  primario secondario altro
M      117        526   768
F       66        166   518
#
# Come estrarre colonne
dati[,2]
  M   F 
526 166
# Come avere una distribuzione percentuale
prop.table(dati)
    primario secondario     altro
M 0.05414160 0.24340583 0.3553910
F 0.03054142 0.07681629 0.2397038
# Verifica che la somma faccia 1:
sum(prop.table(dati))
[1] 1
# la somma delle colonne e delle righe
colSums(dati)
  primario secondario      altro 
       183        692       1286 
rowSums(dati)
   M    F 
1411  750
# la matrice trasposta (righe e colonne scambiate)
t(dati)
             M   F
primario   117  66
secondario 526 166
altro      768 518
colSums(t(dati))
   M    F 
1411  750
# gli istogrammi (percentuali) di sesso e settore affiancati
# (usando par, mfrow, mar)
c <- t(dati)
c1 <- c[1,]; c2 <- c[2,]; c3 <- c[3,]
par(mfrow=c(1,3), mar=c(3,3,2,1))
lim <- c(0,0.8)
barplot(c1/sum(c1),ylim=lim); barplot(c2/sum(c2),ylim=lim); barplot(c3/sum(c3),ylim=lim)
c1 <- c[,1]; c2 <- c[,2]
par(mfrow=c(1,2), mar=c(6,3,2,1))
lim <- c(0,0.7)
barplot(c1/sum(c1),ylim=lim,las=2); barplot(c2/sum(c2),ylim=lim,las=2)

# C'è anche la possibilità di avere una rappresentazione alternativa
# della coppia di variabili:
dat <- c(117,66, 526,166, 768,518)
nomi <- list(c("M","F"),c("I","II","III"))
dati <- matrix(dat, nrow = 2, ncol = 3,dimnames=nomi)
par(mfrow=c(1,2))
mosaicplot(dati)
mosaicplot(t(dati))

vedi qui per ottenere un istogramma bidimensionale della distribuzione