R语言分类变量的统计描述

目录

一、一维列联表

二、二维列联表

三、多维列联表


上篇介绍了连续变量的统计描述的R语言相关函数,计算数值的相关统计指标。本文介绍分类变量的统计描述及如何在R语言中实现。

不同于连续变量,在统计分析中,分类变量的统计描述主要是汇总分类变量各类别例数及百分比。后续举例以R自带数据集mtcars为例。

一、一维列联表

1、table()函数

在对分类变量的统计描述中,table()函数是我们常用的一维列联表函数。

table(mtcars$cyl) 可以获取各类的频数。值得注意的是,如果想显示缺失数据,需要加上参数useNA="ifany"。

> table(mtcars$cyl)

 4  6  8 
11  7 14

> table(mtcars$am)

 0  1 
19 13 

2、prop.table()函数

prop.table(table(mtcars$cyl)) 可以获得各类占总体的频率。

> prop.table(table(mtcars$cyl))

      4       6       8 
0.34375 0.21875 0.43750 

> prop.table(table(mtcars$cyl))*100  #*100可以获得百分比

     4      6      8 
34.375 21.875 43.750 

二、二维列联表

1、table()函数

table(A,B) ,A是行变量,B是列变量;

由结果可知,am=0列,cyl=4、6、8的频数依次是3、4、12;am=1列,cyl=4、6、8频数依次是8、3、2。

> table(mtcars$cyl,mtcars$am)
   
     0  1
  4  3  8
  6  4  3
  8 12  2

> prop.table(table(mtcars$cyl,mtcars$am))  #各单元占总体百分比
   
          0       1
  4 0.09375 0.25000
  6 0.12500 0.09375
  8 0.37500 0.06250

> prop.table(table(mtcars$cyl,mtcars$am),1)#各单元占行百分比
   
            0         1
  4 0.2727273 0.7272727
  6 0.5714286 0.4285714
  8 0.8571429 0.1428571
> prop.table(table(mtcars$cyl,mtcars$am),2)#各单元占列百分比
   
            0         1
  4 0.1578947 0.6153846
  6 0.2105263 0.2307692
  8 0.6315789 0.1538462

2、xtabs()函数

表达式为:xtabs(~A+B,data=mydata),结果同table()函数一致。求得各单元百分比用prop.table()函数。addmargins()函数可求边际和。

> xtabs(~cyl+am,data = mtcars)
   am
cyl  0  1
  4  3  8
  6  4  3
  8 12  2

> addmargins(xtabs(~cyl+am,data = mtcars)) #addmargins()函数可以求边际和
     am
cyl    0  1 Sum
  4    3  8  11
  6    4  3   7
  8   12  2  14
  Sum 19 13  32

3、CrossTable()函数

gmodels 包中的 CrossTable() 函数也可以创建二维列联表。其函数表达式和table()函数相似。
> library(gmodels)
> CrossTable(mtcars$cyl,mtcars$am)

 
   Cell Contents
|-------------------------|
|                       N |
| Chi-square contribution |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|

 
Total Observations in Table:  32 

 
             | mtcars$am 
  mtcars$cyl |         0 |         1 | Row Total | 
-------------|-----------|-----------|-----------|
           4 |         3 |         8 |        11 | 
             |     1.909 |     2.790 |           | 
             |     0.273 |     0.727 |     0.344 | 
             |     0.158 |     0.615 |           | 
             |     0.094 |     0.250 |           | 
-------------|-----------|-----------|-----------|
           6 |         4 |         3 |         7 | 
             |     0.006 |     0.009 |           | 
             |     0.571 |     0.429 |     0.219 | 
             |     0.211 |     0.231 |           | 
             |     0.125 |     0.094 |           | 
-------------|-----------|-----------|-----------|
           8 |        12 |         2 |        14 | 
             |     1.636 |     2.391 |           | 
             |     0.857 |     0.143 |     0.438 | 
             |     0.632 |     0.154 |           | 
             |     0.375 |     0.062 |           | 
-------------|-----------|-----------|-----------|
Column Total |        19 |        13 |        32 | 
             |     0.594 |     0.406 |           | 
-------------|-----------|-----------|-----------|

 

三、多维列联表

如果有三个及以上的分类变量进行交叉汇总频数,就要生成多维列联表。table()函数和xtabs()函数都可以基于三个或者更多的分类变量生成多维列联表。prop.table()、addmargins()函数都可以推广使用。

> table(mtcars$cyl,mtcars$am,mtcars$gear)
, ,  = 3

   
     0  1
  4  1  0
  6  2  0
  8 12  0

, ,  = 4

   
     0  1
  4  2  6
  6  2  2
  8  0  0

, ,  = 5

   
     0  1
  4  0  2
  6  0  1
  8  0  2

> xtabs(~cyl+am+gear,data = mtcars)
, , gear = 3

   am
cyl  0  1
  4  1  0
  6  2  0
  8 12  0

, , gear = 4

   am
cyl  0  1
  4  2  6
  6  2  2
  8  0  0

, , gear = 5

   am
cyl  0  1
  4  0  2
  6  0  1
  8  0  2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值