还是沿用之前的数据,我们继续探讨table1的制表功能。这里主要展示个性化制表,变化不同形式的表,以及最为重要的显著性检验P值。
library(table1)
library(boot)
data <- melanoma
data$status <- factor(data$status,
levels=c(2,1,3),
labels=c("Alive", "Melanoma death", "Non-melanoma death"))
data$sex <- factor(data$sex, levels=c(1,0), labels=c("Male", "Female"))
data$ulcer <- factor(data$ulcer, levels=c(0,1),labels=c("Absent", "Present"))
table1可内置多个三线表的形式,指定topclass参数即可,格式是Rtable1-,后面接参数有zebra、grid、times、center等。
?table1
#topclass
table1(~ factor(sex) + age + factor(ulcer) + thickness | status,
data=data, topclass = "Rtable1-grid Rtable1-zebra")
图片
接着即可添加统计P值,但是table1没有内置功能,所以需要使用外部函数。这里说明下:仅仅是为了展示这个功能所以才这样排列数据的,具体问题具体对待!
pvalue <- function(x, ...) {
y <- unlist(x)
g <- factor(rep(1:length(x), times=sapply(x, length)))
if (is.numeric(y)) {
p <- t.test(y ~ g)$p.value #数值型数据用t-test(两组比较)
} else {
p <- chisq.test(table(y, g))$p.value #因子型数据用卡方
}
c("", sub("<", "<", format.pval(p, digits=3, eps=0.001)))
}
设置overall=F,添加额外列extra.col即可。
table1(~ age + sex + status | ulcer,data=data, extra.col=list(`P-value`=pvalue), overall=F)
图片
table1还是很好用的,在描述性统计上不仅减轻了工作量,而且可以做到统计和绘表的功能。需要的小伙伴赶快学习起来吧!
网友评论