如何按频次排序CreateTableOne生成的多变量统计结果?
如何让CreateTableOne的统计结果按类别频次排序
CreateTableOne本身没有内置参数直接实现按类别频次排序,但可以通过提前调整分类变量的因子水平顺序来达成这个效果——因为该函数会严格按照变量的因子水平顺序展示类别。
具体实现步骤
先对每个分类变量,按其类别出现的频次降序排列,再将变量转换为对应顺序的因子,之后再调用CreateTableOne即可。
完整代码示例:
# 原始数据 Hospital <- c("AA","BB","BB","CC","BB","AA", "CC", "BB", "CC", "DD") `Disease stage` <- c("3","2","2","3","2","1","2","3","2","2") Location <- c("B","A","B","A","C","B","B","B","C","A") mydata <- data.frame(Hospital,`Disease stage`,Location) # 自定义函数:按频次降序调整因子水平 reorder_by_freq <- function(x) { # 计算各类别频次 freq_table <- table(x) # 按频次降序提取类别名称 sorted_levels <- names(sort(freq_table, decreasing = TRUE)) # 转换为指定水平顺序的因子 factor(x, levels = sorted_levels) } # 对数据框中所有变量应用排序函数 mydata[] <- lapply(mydata, reorder_by_freq) # 加载包并生成统计表 library(tableone) CreateTableOne(data = mydata)
运行结果说明
生成的统计表中,每个变量的类别会按出现频次从高到低排列:
- Hospital:BB(40.0%) → CC(30.0%) → AA(20.0%) → DD(10.0%)
- Disease stage:2(60.0%) → 3(30.0%) → 1(10.0%)
- Location:B(50.0%) → A(30.0%) → C(20.0%)
如果需要按频次升序排序,只需将函数中的decreasing = TRUE改为FALSE即可。
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

