文件"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(用户)。
> 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中的图像,所以我输入了以下代码:
case_control=factor(aspirin$V3)
ulcer=factor(aspirin$V4)
use=factor(aspirin$V5)
table(case_control,ulcer,use)但我得到的东西是这样的:
, , 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我想要一个有计数的列联表,所以很明显上面的结果不是我想要的。有没有办法解决这个问题?
发布于 2021-10-18 11:48:23
在您的示例中,只需使用
ftable(case_control,ulcer,use)它返回一个“扁平表”
use 1 2
case_control ulcer
1 1 1 1
2 1 1
2 1 1 1
2 1 1这里的主要问题是,您正在丢弃count列。因此,作为替代,这里有一种-在我看来-更好的方法:你可以将xtabs和ftable() (这里用在dplyr管道中)一起使用:
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()这将返回
Aspirin_Use Non-User User
Ulcer_Type Case_Control
Gastric Control 62 6
Case 39 25
Duodenal Control 53 8
Case 49 8数据
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"))https://stackoverflow.com/questions/69615087
复制相似问题