11/28/2006

11.2.9 表列函數tabulate

11.2.9表列函數tabulate



TABLE = tabulate(x)

這個指令可將一向量X之觀測值製成一表格,其第一行為X向量中之相同數值,第二行為該數值出現之次數,最後一行為該值出現之百分比。若X值為含有文字串之陣列或細胞陣列,則第一行為陣列內之獨一的名稱,其餘兩行則相同。下面為利用rand之隨機函數取100個值作比較。

tabulate(round(rand(100,1)*6))
Value Count Percent
0 8 8.00%
1 16 16.00%
2 22 22.00%
3 21 21.00%
4 10 10.00%
5 16 16.00%
6 7 7.00%


tabulate(fix(rand(100,1)*6))
Value Count Percent
0 14 14.00%
1 14 14.00%
2 21 21.00%
3 15 15.00%
4 22 22.00%
5 14 14.00%

由上面之結果比較可以看出:利用四捨五入法之round函數,其在兩端之機率顯然少很多。
利用前節之汽車carsmall.mat資料,亦可以tabulate指令作簡單之統計:

load carsmall
>> tabulate(Origin)
Value Count Percent
USA 69 69.00%
France 4 4.00%
Japan 15 15.00%
Germany 9 9.00%
Sweden 2 2.00%
Italy 1 1.00%

看起來美國地區還是美國車多。

上述tablulate指令之左邊若不給予參數,則會自動產生上述之格式,分成三行,即名稱、數量及百分比。若結果給予一個參數時,其內容會轉為細胞陣列。因此必要時,須利用cell2mat函數轉換為數值陣列。以上述資料為例,下面的型式會有不同的結果:

>> a=tabulate(Origin)

a =

'USA' [69] [69]
'France' [ 4] [ 4]
'Japan' [15] [15]
'Germany' [ 9] [ 9]
'Sweden' [ 2] [ 2]
'Italy' [ 1] [ 1]

顯然其內容均是細胞陣列,若要作成餅圖,則必須稍微變換:

>> pie(cell2mat(a(:,2)),a(:,1))