示例
使用table1库中的CreateTableOne函数
#装载库
library(boot) #melanoma示例数据来源
library(table1) #没有p检验的功能,有制表功能
library(tableone) #有p检验功能的,但是没有制表功能
table_mel <- boot::melanoma #读取黑色素瘤数据集
#table1的输入格式
#table1(~ 变量1 + 变量2 + ... + 变量n | 分层标签, data = 数据)
#绘制table1
table1(~ sex + age + ulcer + thickness | status, data = table_mel)
#修饰table1
#将数值化的变量,重新转成分类变量的意思
#新数据 <- factor(拟转化的数据,levels = c(数值), labels = c(数值对应的类))
table_mel$status <- factor(
table_mel$status,
levels = c(1, 2, 3),
labels = c("melanoma-1", "melanoma-2", "melanoma-3")
)
#0->female,1->male
table_mel$sex <- factor(
table_mel$sex,
levels = c( 0, 1 ),
labels = c("female", "male")
)
table_mel$ulcer <- factor(
table_mel$ulcer,
levels = c(0, 1),
labels = c("no", "yes")
)
table1(~ sex + age + ulcer + thickness | status, data = table_mel)
#两个人群的pvalue计算函数
pvalue <- function(x, ...) {
# 构造向量和分层
y <- unlist(x)
g <- factor(rep(1:length(x), times=sapply(x, length)))
if (is.numeric(y)) {
# 数值型变量采用t检验
p <- t.test(y ~ g)$p.value
} else {
# 类别型变量采用独立chi-squared检验
p <- chisq.test(table(y, g))$p.value
}
# 输出p值,初始空字符串将输出放置在变量标签下方的行上
c("", sub("<", "<", format.pval(p, digits=3, eps=0.001)))
}
#因为table1不具备pvalue显著性检验的功能,因此要自己写函数调用计算
#其实就是添加额外列,extra.col是table1提供的计算方法
table1(~ sex + age + ulcer + thickness | status, data = table_mel, extra.col=list(`P-value`=pvalue))
使用tableone库中的CreateTableOne函数
#CreateTableOne的输入格式
#CreateTableOne(vars = 全部变量, factorVars = 因子变量名, strata = 分层变量, data = 数据)
CreateTableOne(vars = c("sex", "age", "thickness", "ulcer", "status"),
factorVars = c("sex"), strata = "status", data = table_mel)
table = CreateTableOne(vars = c("sex", "age", "thickness", "ulcer", "status"),
factorVars = c("sex"), strata = "status", data = table_mel)
#将生成的table1存成csv格式
table_mat = print(table, quote = FALSE, noSpaces = T, printToggle = FALSE)
write.csv(table_mat, file = "C://Users//Administrator//Desktop//TABLEONE.csv")