R语言的xtabs函数

Stella981
• 阅读 1178

今天在做一个列联表独立性检验的时候,总是无法处理好要求的数据类型,偶然的机会,看到了xtabs()函数,感觉很适合用来做列联表,适合将一列数据转换成列联表。

shifou <- c("yes","yes","no","no")
xinbie <- c("nan","nv","nan","nv")
freq <- c(34,38,28,50)
(exer6_2 <- data.frame(shifou,xinbie,freq))
(count22 <- xtabs(freq~.,data = exer6_2))#这个点表示shifou + xinbie,这个和lm()用法差不多
assocstats(count22)

  运行过程与结果如下:

> shifou <- c("yes","yes","no","no")#是否逃课
> xinbie <- c("nan","nv","nan","nv")#性别
> freq <- c(34,38,28,50)
> (exer6_2 <- data.frame(shifou,xinbie,freq))#“nan”表示男,“nv”表示女,yes表示逃课,no表示不逃课
  shifou xinbie freq
1    yes    nan   34
2    yes     nv   38
3     no    nan   28
4     no     nv   50
> (count22 <- xtabs(freq~.,data = exer6_2))#这个数据表示性别与性别是否有关
      xinbie
shifou nan nv
   no   28 50
   yes  34 38
> assocstats(count22)
                    X^2 df P(> X^2)
Likelihood Ratio 1.9830  1  0.15908
Pearson          1.9802  1  0.15937#这个p值为0.15937大于0.05,表示与性别没有关系

Phi-Coefficient   : 0.115 
Contingency Coeff.: 0.114 
Cramer's V        : 0.115

  接下来,创建一个更加难的数据集

(价格 <- rep(c("10万以下","10~20万","20~30万","30万以上"),each = 3))
(地区 <- rep(c("东部","中部","西部"),each = 1,times = 4))
(数量 <- c(20,40,40,50,60,50,30,20,20,40,20,10))
(销售情况 <- data.frame(价格,地区,数量))
(count2 <- xtabs(数量 ~ (价格 + 地区),data = 销售情况))

  运算过程:

> (价格 <- rep(c("10万以下","10~20万","20~30万","30万以上"),each = 3))
 [1] "10万以下" "10万以下" "10万以下" "10~20万"  "10~20万"  "10~20万"  "20~30万" 
 [8] "20~30万"  "20~30万"  "30万以上" "30万以上" "30万以上"
> (地区 <- rep(c("东部","中部","西部"),each = 1,times = 4))
 [1] "东部" "中部" "西部" "东部" "中部" "西部" "东部" "中部" "西部" "东部" "中部"
[12] "西部"
> (数量 <- c(20,40,40,50,60,50,30,20,20,40,20,10))
 [1] 20 40 40 50 60 50 30 20 20 40 20 10
> (销售情况 <- data.frame(价格,地区,数量))
       价格 地区 数量
1  10万以下 东部   20
2  10万以下 中部   40
3  10万以下 西部   40
4   10~20万 东部   50
5   10~20万 中部   60
6   10~20万 西部   50
7   20~30万 东部   30
8   20~30万 中部   20
9   20~30万 西部   20
10 30万以上 东部   40
11 30万以上 中部   20
12 30万以上 西部   10
> (count2 <- xtabs(数量 ~ (价格 + 地区),data = 销售情况))
          地区
价格       东部 西部 中部
  10~20万    50   50   60
  10万以下   20   40   40
  20~30万    30   20   20
  30万以上   40   10   20

  可以看出这个count2也构成了这个列联表的形式,接下来,使用 chisq.test()函数便可进行卡方检验

> chisq.test(count2)

    Pearson's Chi-squared test

data:  count2
X-squared = 29.991, df = 6, p-value = 3.946e-05
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Spring Boot日志集成
!(https://oscimg.oschina.net/oscnet/1bde8e8d00e848be8b84e9d1d44c9e5c.jpg)SpringBoot日志框架SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用star
Stella981 Stella981
3年前
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?
!(https://oscimg.oschina.net/oscnet/b8c8b22b9f44bd806c26b486e1893a263a4.jpg)这是我的第56篇原创文章!(https://oscimg.oschina.net/oscnet/8bf00bc92f6a1cd46596ee44bac64a801ae.pn
Wesley13 Wesley13
3年前
mysql——GROUP BY和HAVING
GROUPBY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。select子句中的列名必须为分组列或列函数,列函数对于groupby子句定义的每个组返回一个结果。某个员工信息表结构和数据如下:  id  name  dept  salary  edlevel     hiredate   1  张
Wesley13 Wesley13
3年前
ThinkPHP 根据关联数据查询 hasWhere 的使用实例
很多时候,模型关联后需要根据关联的模型做查询。场景:广告表(ad),广告类型表(ad\_type),现在需要筛选出广告类型表中id字段为1且广告表中status为1的列表先看关联的设置部分 publicfunctionadType(){return$thisbelongsTo('A
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这