R语言统计分析——频数表和列联表1

参考资料:R语言实战【第2版】

导入分析用数据案例

library(vcd)
head(Arthritis)

1、生成频数表

        R语言提供了用于创建频数表和列联表的若干种方法。如下:

函数描述
table(var1,var2,...,varN)使用N个类别型变量(因子)创建一个N维列联表
xtabs(formula,data)根据一个公式和一个矩阵或数据框创建一个N维列联表
prop.table(table,margins)依margins定义的边际列表将表中条目表示为分数形式
margin.table(table,margins)依margins定义的边际列表计算表中条目的和
addmargins(table,margins)将概述边margins(默认是求和结果)放入表中
ftable创建一个紧凑的“平铺”式列联表

1、一维列联表

# 使用table()函数
mytable<-with(Arthritis,table(Improved))
mytable

table(Arthritis$Improved)

# 使用prop.table()函数将频数转化为比例值
prop.table(mytable)
# 使用prop.table()*100转化为百分比
prop.table(mytable)*100

2、二维列联表

        对于二维列联表,table()函数的使用格式为:

        mytable<-table(A,B);其中,A是行变量,B是列变量。

        xtabs()函数还可以使用公式风格的输入创建联列表,格式:

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

# 使用table()函数
table(Arthritis$Treatment,Arthritis$Improved)
with(Arthritis,table(Treatment,Improved))
# 使用xtabs()函数
mytable<-xtabs(~Treatment+Improved,data=Arthritis)
mytable
# 使用margin.table()函数生成边际频数
margin.table(mytable,1)
margin.table(mytable,2)
# 使用prop.table()函数生成比例值
prop.table(mytable,1)
prop.table(mytable,2)

        上例中margin.table()函数和prop.table()函数中的第二个参数margin是指定按行或按列进行汇总。

        还可以使用addmargins()函数为table添加边际的和。在使用addmargins()函数时,默认行为是为表中所有变量创建边际和。如下:

# 对列进行汇总
addmargins(mytable,margin = 1)
margin.table(mytable,margin=2)
# 对行进行汇总
addmargins(mytable,margin=2)
margin.table(mytable,margin=1)
# 对表格进行百分比求和
addmargins(prop.table(mytable))
addmargins(prop.table(mytable,1),2)
addmargins(prop.table(mytable,2),1)

        注意:table()函数默认忽略缺失值(NA)。要在频数统计中奖NA视为一个有效的类别,需要设定参数useNA="ifany"。

        使用gmodels包中的CrossTable()函数时创建二维列联表的第三种方法。CrossTable()函数有很多选项,可以做很多事情:如计算(行、列、单元格)的百分比、指定小数位数、进行卡方、Fisher和McNemar独立性检验、计算期望和(皮尔逊、标准化、调整的标准化)残差、将缺失值作为一种有效值、进行行标题和列标题的标注等等。如下:

# 加载gmodels包
library(gmodels)
# 应用CrossTable函数
CrossTable(Arthritis$Treatment,Arthritis$Improved)

3、多维列联表

        table()和xtabs()函数都可以给予三个或更多类型变量生成多维列联表。margin.table()、prop.table()和addmargins()函数可以自然地推广到高于二维的情况。另外,ftable()函数可以以只用紧凑的方式输出多维列联表。如下:

# 三维列联表
mytable<-xtabs(~Treatment+Sex+Improved,data=Arthritis)
mytable
# 紧凑格式
ftable(mytable)
# 求边际和
margin.table(mytable,1)  # mytable的第一个变量
margin.table(mytable,2)  # mytable的第二个变量
margin.table(mytable,3)  # mytable的第三个变量
margin.table(mytable,c(1,3))  # 求第1和第3个交叉的和
margin.table(mytable,c(1,2))  # 求第1和第2个变量交叉的和

ftable(prop.table(mytable,c(1,2)))
ftable(addmargins(prop.table(mytable,c(1,2)),3))
ftable(addmargins(prop.table(mytable,c(1,2))*100,3))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值