如何用modelsummary对单因子变量制表?解决下标越界错误
解决modelsummary单因子变量制表的下标越界问题
错误原因
datasummary_crosstab是专门用于两个分类变量交叉统计的函数,你传入的cyl ~ 1中,右侧的1不是有效分类变量,导致函数无法正常解析交叉表结构,从而抛出「下标越界」错误。
正确实现方式(列百分比总和为1)
方法1:使用datasummary直接生成单变量比例表
这是最直接的方式,利用modelsummary内置的Prop()统计量生成比例(总和为1):
library(modelsummary) # 先将cyl转为因子(确保是分类变量) mtcars$cyl <- factor(mtcars$cyl) # 生成单变量比例表,比例总和为1 datasummary(cyl ~ Prop(), data = mtcars)
方法2:用datasummary_crosstab配合虚拟变量
如果坚持要用datasummary_crosstab,可以创建一个全为同一值的虚拟列,作为交叉表的列变量,再转换列百分比为小数(总和为1):
library(modelsummary) mtcars$cyl <- factor(mtcars$cyl) # 添加虚拟列 mtcars$all <- "All" # 生成列百分比表,转换为小数后总和为1 datasummary_crosstab(cyl ~ all, data = mtcars, statistic = ~ ColPercent()/100)
补充:同时展示频数和比例
如果需要同时显示频数和比例,可以扩展公式:
datasummary(cyl ~ Freq + Prop(), data = mtcars)
内容的提问来源于stack exchange,提问作者robertspierre




