一维度、二维度-频数表和列联表

  • 生成频数表

创建频数表和列联表 的若干种方法

函数    描述
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()生成简单的频数统计表

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()

二维表也可以使用table() ,格式为

mytable <- table(A,B)

A是行变量,B是列变量

  • xtabs()
mytable <- xtabs(~A+B,data= mydata)

mydata是一个矩阵或数据框,总的来说,要进行交叉分类的变量应出现在公式的右侧(即~符号的右方),以 + 作为分隔符。若某个变量写在公式的左侧,其为一个频数向量(在数据已经被表格化时很有用)

> 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()求每个观测值占行和的比例

> 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()求每个观测值占列和的比例

> 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

各单元格所占比例

> prop.table(mytable) # 各单元格占总数的比例
         Improved
Treatment       None       Some     Marked
  Placebo 0.34523810 0.08333333 0.08333333
  Treated 0.15476190 0.08333333 0.25000000

addmargins()添加表的边际和

> 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

 

  • 使用CrossTable生成二维列联表

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 |           | 
--------------------|-----------|-----------|-----------|-----------|

 

 

转载于:https://my.oschina.net/u/1785519/blog/1563106

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值