建立頻數表和列聯表 的若干種方法函數
函數 | 描述 |
table(var1,var2,...,varN) | 使用N個類別型變量(因子)建立一個N維列聯表 |
xtabs(formula,data) | 根據一個公式和一個矩陣或數據框建立一個N維列聯表 |
prop.table(table,margins)·· | 依margins定義的邊際列表計算將表中條目表示爲分數形式 簡單理解:每一個觀測值與行之和的比 若是margins沒寫,則表明每一個觀測值(確切說應該是單元格)站沒有總數的比例 |
margin.table(table,margins) | 依margins定義的邊際列表計算表中條目的和 簡單理解:就是行之和 |
addmargins(table,margins) | 將概述邊margins(默認是求和結果)放入表中 |
ftable(table) | 建立一個緊湊的「平鋪」式列聯表 |
table()生成簡單的頻數統計表spa
library(vcd) head(Arthritis) > table(Arthritis$Improved) None Some Marked 42 14 28 > mytable <- with(Arthritis, #應該與table(Arthritis$Improved)等價的呀? + table(Improved)) > mytable Improved None Some Marked 42 14 28 > prop.table(mytable) #將這些頻數轉化爲比例值 Improved None Some Marked 0.50000········00 0.1666667 0.3333333 > prop.table(mytable)*100 #轉化爲百分比 Improved None Some Marked 50.00000 16.66667 33.33333
二維表也能夠使用table() ,格式爲code
mytable <- table(A,B)
A是行變量,B是列變量orm
mytable <- xtabs(~A+B,data= mydata)
mydata是一個矩陣或數據框,總的來講,要進行交叉分類的變量應出如今公式的右側(即~符號的右方),以 + 做爲分隔符。若某個變量寫在公式的左側,其爲一個頻數向量(在數據已經被表格化時頗有用)ci
> mytable <- xtabs(~ Treatment+Improved, data=Arthritis) > mytable # frequencies Improved Treatment None Some Marked Placebo 29 7 7 Treated 13 7 21
使用margin.table()求行和,使用prop.table()求每一個觀測值佔行和的比例it
> margin.table(mytable,1) # 1指代table(A,B)語句的第一個變量A Treatment Placebo Treated 43 41 > prop.table(mytable,1) Improved Treatment None Some Marked Placebo 0.6744186 0.1627907 0.1627907 Treated 0.3170732 0.1707317 0.5121951
使用margin.table()求列和,使用prop.table()求每一個觀測值佔列和的比例io
> prop.table(mytable, 1) #2指代table(A,B)語句的第二個變量B Improved Treatment None Some Marked Placebo 0.6744186 0.1627907 0.1627907 Treated 0.3170732 0.1707317 0.5121951 > prop.table(mytable, 2) Improved Treatment None Some Marked Placebo 0.6904762 0.5000000 0.2500000 Treated 0.3095238 0.5000000 0.7500000
各單元格所佔比例table
> prop.table(mytable) # 各單元格佔總數的比例 Improved Treatment None Some Marked Placebo 0.34523810 0.08333333 0.08333333 Treated 0.15476190 0.08333333 0.25000000
addmargins()添加表的邊際和form
> addmargins(mytable) # 添加行與列的和 Improved Treatment None Some Marked Sum Placebo 29 7 7 43 Treated 13 7 21 41 Sum 42 14 28 84
計算比例變量
> addmargins(prop.table(mytable)) #計算每一個單元格佔比的行列和 Improved Treatment None Some Marked Sum Placebo 0.34523810 0.08333333 0.08333333 0.51190476 Treated 0.15476190 0.08333333 0.25000000 0.48809524 Sum 0.50000000 0.16666667 0.33333333 1.00000000 > addmargins(prop.table(mytable, 1), 2) #僅添加行的和 Improved Treatment None Some Marked Sum Placebo 0.6744186 0.1627907 0.1627907 1.0000000 Treated 0.3170732 0.1707317 0.5121951 1.0000000 > addmargins(prop.table(mytable, 2), 1) #僅添加列的he Improved Treatment None Some Marked Placebo 0.6904762 0.5000000 0.2500000 Treated 0.3095238 0.5000000 0.7500000 Sum 1.0000000 1.0000000 1.0000000
注:
table()函數默認忽略缺失值(NA),要在頻數統計中將NA視爲一個有效的類別,請設定參數 useNA=「ifany」ifany
Cross Table()函數能夠不少的事情,計算(行、列、單元格)的百分比,指定小數位數,進行卡方, Fisher(費希爾)和McNemar獨立性檢驗 (兩種檢驗都屬於列聯表數據的獨立性檢驗);計算指望和(皮爾遜,標準化,調整的標準化)殘差,將缺失值做爲一種有效值,進行行和列標題的標註;生成SAS或SPSS風格的輸出
更多參考 help(CrossTable)
> library(gmodels) Warning message: 程輯包‘gmodels’是用R版本3.4.1 來建造的 > CrossTable(Arthritis$Treatment,Arthritis$Improved) Cell Contents |-------------------------| | N | | Chi-square contribution | | N / Row Total | | N / Col Total | | N / Table Total | |-------------------------| Total Observations in Table: 84 | Arthritis$Improved Arthritis$Treatment | None | Some | Marked | Row Total | --------------------|-----------|-----------|-----------|-----------| Placebo | 29 | 7 | 7 | 43 | | 2.616 | 0.004 | 3.752 | | | 0.674 | 0.163 | 0.163 | 0.512 | | 0.690 | 0.500 | 0.250 | | | 0.345 | 0.083 | 0.083 | | --------------------|-----------|-----------|-----------|-----------| Treated | 13 | 7 | 21 | 41 | | 2.744 | 0.004 | 3.935 | | | 0.317 | 0.171 | 0.512 | 0.488 | | 0.310 | 0.500 | 0.750 | | | 0.155 | 0.083 | 0.250 | | --------------------|-----------|-----------|-----------|-----------| Column Total | 42 | 14 | 28 | 84 | | 0.500 | 0.167 | 0.333 | | --------------------|-----------|-----------|-----------|-----------|