sjPlot包sjt.xtab函数drop.empty参数不生效问题咨询
问题原因说明
你对drop.empty参数的使用方式没有错误,参数未按文档描述生效是函数本身的逻辑覆盖不全导致的:
sjt.xtab的drop.empty参数判断逻辑,仅针对带外部值标签的变量(比如通过haven包读取的SPSS/Stata格式调研数据,值标签独立存储在变量属性中)生效,会自动识别这类变量里没有对应观测的取值,按参数设置决定是保留0频率行还是直接隐藏。- 对R原生的factor类型变量,函数不会主动校验每个levels是否存在对应观测,会直接读取因子自带的levels属性全量输出,哪怕对应水平已经在子集筛选后没有样本了,
drop.empty=FALSE的设置对这类空因子水平完全不生效。
可用解决方案
目前最稳妥、兼容性最好的处理方式就是你已经在用的droplevels()方案,在子集筛选完成后提前清除数据中所有因子的空水平即可,不需要额外调整sjt.xtab的参数,复现示例调整后代码如下:
color <- factor(c("blue", "yellow", "red", "red", "blue")) object <- factor(c("table", "chair", "table", "chair", "chair")) df <- data.frame(color, object) df <- subset(df, color == "red" | color == "blue") # 提前清除所有因子的空水平,从根源避免空水平出现在交叉表中 df <- droplevels(df) sjPlot::sjt.xtab(df$color, df$object)
不建议为了触发drop.empty的判断逻辑特意把普通因子转换为带值标签的变量类型,额外增加步骤反而容易引入其他格式问题。
内容的提问来源于stack exchange,提问作者Alejandro Gonzalez
相关产品推荐
相关产品推荐

