6.11 表格统计

介绍操作表格的 table, addmargins, prop.table, xtabs, margin.table, ftabe 等函数

table 多个分类变量分组计数统计

  • 介绍 warpbreaks 和 airquality 纽约空气质量监测数据集 二维的数据框
  • UCBAdmissions 1973 年加州大学伯克利分校的院系录取数据集 3维的列联表
  • Titanic 4维的列联表数据 泰坦尼克号幸存者数据集
with(warpbreaks, table(wool, tension))
##     tension
## wool L M H
##    A 9 9 9
##    B 9 9 9

以 iris 数据集为例,table 的第一个参数是自己制造的第二个分类变量,原始分类变量是 Species

with(iris, table(Sepal.check = Sepal.Length > 7, Species))
##            Species
## Sepal.check setosa versicolor virginica
##       FALSE     50         50        38
##       TRUE       0          0        12
with(iris, table(Sepal.check = Sepal.Length > mean(Sepal.Length), Species))
##            Species
## Sepal.check setosa versicolor virginica
##       FALSE     50         24         6
##       TRUE       0         26        44

以 airquality 数据集为例,看看月份中臭氧含量比较高的几天

aiq.tab <- with(airquality, table(Oz.high = Ozone > 80, Month))
aiq.tab
##        Month
## Oz.high  5  6  7  8  9
##   FALSE 25  9 20 19 27
##   TRUE   1  0  6  7  2

对表格按行和列求和,即求表格的边际,查看总体情况

addmargins(aiq.tab, 1:2)
##        Month
## Oz.high   5   6   7   8   9 Sum
##   FALSE  25   9  20  19  27 100
##   TRUE    1   0   6   7   2  16
##   Sum    26   9  26  26  29 116

臭氧含量超 80 的天数在每个月的占比,addmargins 的第二个参数 1 表示对列求和

aiq.prop <- prop.table(aiq.tab, 2)
aiq.prop
##        Month
## Oz.high          5          6          7          8          9
##   FALSE 0.96153846 1.00000000 0.76923077 0.73076923 0.93103448
##   TRUE  0.03846154 0.00000000 0.23076923 0.26923077 0.06896552
aiq.marprop <- addmargins(aiq.prop, 1)
aiq.marprop
##        Month
## Oz.high          5          6          7          8          9
##   FALSE 0.96153846 1.00000000 0.76923077 0.73076923 0.93103448
##   TRUE  0.03846154 0.00000000 0.23076923 0.26923077 0.06896552
##   Sum   1.00000000 1.00000000 1.00000000 1.00000000 1.00000000

转换成百分比,将小数四舍五入转化为百分数,保留两位小数点

round(100 * aiq.marprop, 2)
##        Month
## Oz.high      5      6      7      8      9
##   FALSE  96.15 100.00  76.92  73.08  93.10
##   TRUE    3.85   0.00  23.08  26.92   6.90
##   Sum   100.00 100.00 100.00 100.00 100.00
pairs(airquality, panel = panel.smooth, main = "airquality data")

以 UCBAdmissions 数据集为例,使用 xtabs 函数把数据组织成列联表,先查看数据的内容

UCBAdmissions
## , , Dept = A
## 
##           Gender
## Admit      Male Female
##   Admitted  512     89
##   Rejected  313     19
....
UCBA2DF <- as.data.frame(UCBAdmissions)
UCBA2DF
##       Admit Gender Dept Freq
## 1  Admitted   Male    A  512
## 2  Rejected   Male    A  313
## 3  Admitted Female    A   89
## 4  Rejected Female    A   19
## 5  Admitted   Male    B  353
....

接着将 UCBA2DF 数据集转化为表格的形式

UCBA2DF.tab <- xtabs(Freq ~ Gender + Admit + Dept, data = UCBA2DF)
ftable(UCBA2DF.tab)
##                 Dept   A   B   C   D   E   F
## Gender Admit                                
## Male   Admitted      512 353 120 138  53  22
##        Rejected      313 207 205 279 138 351
## Female Admitted       89  17 202 131  94  24
##        Rejected       19   8 391 244 299 317

将录取性别和院系进行对比

prop.table(margin.table(UCBA2DF.tab, c(1, 3)), 1)
##         Dept
## Gender            A          B          C          D          E          F
##   Male   0.30657748 0.20810108 0.12077295 0.15496098 0.07097733 0.13861018
##   Female 0.05885559 0.01362398 0.32316076 0.20435967 0.21416894 0.18583106

男生倾向于申请院系 A 和 B,女生倾向于申请院系 C 到 F,院系 A 和 B 是最容易录取的。