首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建2*2*2列联表时遇到问题

构建2*2*2列联表时遇到问题
EN

Stack Overflow用户
提问于 2021-10-18 11:15:59
回答 1查看 66关注 0票数 1

文件"Aspirin“包含一个2×2×2的列联表,其列定义如下。

第1列: V1=Observation编号。观察1至8。

第2列: V2=Count。表中每个单元格的非负整数计数。

第3列:V3=案例/控制因素。因子水平1(对照)和水平2(病例)。

第4列: V4=Ulcer类型因素。因子水平1(胃)和水平2(十二指肠)。

第5列: V5=Aspirin使用系数。因子级别1(非用户)和级别2(用户)。

代码语言:javascript
复制
> aspirin
  V1 V2 V3 V4 V5
1  1 62  1  1  1
2  2 39  2  1  1
3  3 53  1  2  1
4  4 49  2  2  1
5  5  6  1  1  2
6  6 25  2  1  2
7  7  8  1  2  2
8  8  8  2  2  2

我想构建一个2x2x2的列联表,就像上面的R中的图像,所以我输入了以下代码:

代码语言:javascript
复制
case_control=factor(aspirin$V3)
ulcer=factor(aspirin$V4)
use=factor(aspirin$V5)
table(case_control,ulcer,use)

但我得到的东西是这样的:

代码语言:javascript
复制
, , use = 1

            ulcer
case_control 1 2
           1 1 1
           2 1 1

, , use = 2

            ulcer
case_control 1 2
           1 1 1
           2 1 1

我想要一个有计数的列联表,所以很明显上面的结果不是我想要的。有没有办法解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-18 11:48:23

在您的示例中,只需使用

代码语言:javascript
复制
ftable(case_control,ulcer,use)

它返回一个“扁平表”

代码语言:javascript
复制
                   use 1 2
case_control ulcer        
1            1         1 1
             2         1 1
2            1         1 1
             2         1 1

这里的主要问题是,您正在丢弃count列。因此,作为替代,这里有一种-在我看来-更好的方法:你可以将xtabsftable() (这里用在dplyr管道中)一起使用:

代码语言:javascript
复制
library(dplyr)

df %>% 
  transmute(ID = V1,
            Count = V2,
            Case_Control = factor(V3,
                                  labels = c("Control", "Case")),
            Ulcer_Type = factor(V4,
                                labels = c("Gastric", "Duodenal")),
            Aspirin_Use = factor(V5,
                                 labels = c("Non-User", "User"))) %>% 
  xtabs(Count ~ Ulcer_Type + Case_Control + Aspirin_Use, data = .) %>% 
  ftable()

这将返回

代码语言:javascript
复制
                        Aspirin_Use Non-User User
Ulcer_Type Case_Control                          
Gastric    Control                        62    6
           Case                           39   25
Duodenal   Control                        53    8
           Case                           49    8

数据

代码语言:javascript
复制
df <- structure(list(V1 = c(1, 2, 3, 4, 5, 6, 7, 8), V2 = c(62, 39, 
53, 49, 6, 25, 8, 8), V3 = c(1, 2, 1, 2, 1, 2, 1, 2), V4 = c(1, 
1, 2, 2, 1, 1, 2, 2), V5 = c(1, 1, 1, 1, 2, 2, 2, 2)), row.names = c(NA, 
-8L), class = c("tbl_df", "tbl", "data.frame"))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69615087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档