如何在R的table1包中重新调整因子水平的显示顺序?
解决table1包强制按字母排序因子水平的问题
核心原因是table1()函数默认会忽略你设置的因子水平顺序,强制按字母排序,只要在调用函数时加上factor.order = TRUE参数,就能保留你自定义的因子顺序。具体步骤如下:
先按需求设置因子水平顺序
用factor()或forcats包的函数(比如fct_relevel())把变量转为因子,并指定你想要的显示顺序:library(tidyverse) library(table1) # 示例数据 df <- tibble( income = sample(c("Less than 20k", "10k-20k", "20k-30k", "30k+"), 100, replace = TRUE) ) # 自定义收入分类的因子顺序 df <- df %>% mutate(income = factor(income, levels = c("Less than 20k", "10k-20k", "20k-30k", "30k+")))调用table1时开启factor.order参数
在table1()中设置factor.order = TRUE,让函数尊重你预先设置的因子水平顺序:table1(~ income, data = df, factor.order = TRUE)
多变量批量设置的情况
如果有多个有序变量需要自定义顺序,只需逐个设置因子水平,然后统一在table1()中添加factor.order = TRUE即可:
df <- df %>% mutate( education = factor(education, levels = c("High school", "Bachelor", "Master", "PhD")), age_group = factor(age_group, levels = c("18-24", "25-34", "35-44", "45+")) ) table1(~ income + education + age_group, data = df, factor.order = TRUE)
补充说明
之前你用tidyverse重排因子后无效,是因为table1默认参数factor.order = FALSE,会强制对所有因子水平按字母重新排序。开启这个参数后,函数就会严格遵循你定义的因子顺序输出表格。
内容的提问来源于stack exchange,提问作者William Hutson
相关产品推荐
相关产品推荐

