You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按频次排序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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:10:32