如何按指定列(如均值)排序modelsummary包的datasummary输出?
解决modelsummary的datasummary按统计量排序问题
你之前的方法无效是因为coef_rename和coef_map是针对回归模型系数的重命名工具,不适用描述性统计表格的变量排序。datasummary的公式左侧变量顺序是固定的,必须先确定排序后的变量列表,再动态传入公式或直接构造统计量数据框输出。
方法一:动态生成排序后的公式
先计算变量的均值并排序,再把排序后的变量名转换成datasummary可识别的公式:
library(modelsummary) library(dplyr) # 1. 计算目标变量的均值,按均值降序提取变量名 sorted_vars <- mtcars %>% select(hp, mpg) %>% # 指定要分析的变量 summarise(across(everything(), mean)) %>% pivot_longer(everything(), names_to = "var", values_to = "mean") %>% arrange(desc(mean)) %>% pull(var) # 2. 动态生成datasummary公式 formula <- as.formula(paste(paste(sorted_vars, collapse = "+"), "~ mean + sd")) # 3. 生成排序后的统计表格 datasummary(formula, data = mtcars)
方法二:先构造统计量数据框再输出
如果需要更灵活的格式控制,可以先手动计算统计量并排序,再用datasummary_df输出:
# 1. 计算统计量并整理成排序后的数据框 summary_df <- mtcars %>% select(hp, mpg) %>% summarise(across(everything(), list(均值 = mean, 标准差 = sd))) %>% pivot_longer(everything(), names_to = c("变量", "统计量"), names_sep = "_") %>% pivot_wider(names_from = "统计量", values_from = "value") %>% arrange(desc(均值)) # 2. 输出格式化表格 datasummary_df(summary_df, fmt = "%.2f", # 设置数值保留两位小数 col.names = c("变量", "均值", "标准差"))
内容的提问来源于stack exchange,提问作者Sulz
相关产品推荐
相关产品推荐

