R/RStudio下用expss包制表如何移除Top3/Bottom3 Box的TRUE/FALSE显示行
问题根源说明
表格中自动拆分的TRUE/FALSE行,是expss对逻辑值的默认处理逻辑导致的:当在tab_cells中直接传入未加工的逻辑判断表达式(哪怕已经给表达式加了自定义行标签),软件会默认把这类两值变量当作普通分类变量,自动将TRUE、FALSE两个水平分别拆成独立行展示,就出现了不需要的二值分类行。
实现目标效果的修改方法
- 调整
tab_cells的传入逻辑:- 如果不需要展示原题目
qcs1a_SQ001的逐值分布,直接删掉参数里裸写的qcs1a_SQ001,避免原变量所有取值占用表格行 - 对每个自定义的逻辑判断项(Top 3 Box、Bottom 3 Box),用
na_if()把不满足条件的FALSE值转为缺失值,从根源上让软件识别不到FALSE这个分类水平 - 如果确实需要保留原题目
qcs1a_SQ001的逐值分布,只需要把裸的qcs1a_SQ001放回tab_cells的第一个位置即可,加了na_if处理的逻辑项依然不会拆分出TRUE/FALSE行
- 如果不需要展示原题目
- 调整后的可直接运行的代码:
library(expss) X4607 %>% tab_cells( # 将不满足Top3条件的FALSE值转为缺失值,仅保留满足条件的非NA样本 "Top 3 Box" = na_if(qcs1a_SQ001 >7 & qcs1a_SQ001 <11, 0), "Bottom 3 Box" = na_if(qcs1a_SQ001 <=2, 0) ) %>% tab_cols(total(), spcode) %>% tab_stat_cpct() %>% tab_last_sig_cpct() %>% tab_pivot()
修改后的效果说明
na_if(条件判断, 0)会把所有判断结果为0(即FALSE、不满足设定条件)的样本标记为缺失值NA,expss构建交叉表时默认会自动剔除缺失值,不会把缺失值作为独立行展示- 调整后的逻辑项只剩一个非NA的水平(即满足设定条件的样本),自然不会再拆出TRUE、FALSE两行
- 最终计算的Top 3 Box、Bottom 3 Box占比和原计算逻辑完全一致:计算时以列内所有非有效缺失的总样本为分母,以满足条件的样本数为分子,不会出现数值偏差
内容的提问来源于stack exchange,提问作者larryb
相关产品推荐
相关产品推荐

