如何让janitor包的tabyl函数显示含全0值的缺失列
如何让janitor包的tabyl函数显示无观测的列?
janitor包的tabyl函数生成交叉频数表时,默认只会显示数据中实际存在的变量水平。比如当交叉变量(如var_3)只有一个观测水平时,即使你期望显示其他未出现的水平,直接设置show_missing_levels = TRUE也不会生效。
示例场景
现有数据框df2:
df2 <- data.frame( var_1 = c(rep("ja",7),rep("nein",13)), var_2 = c(31:50), var_3 = c(rep(0,10),rep(0,10)) )
直接调用tabyl只会显示var_3=0的列:
df2 %>% tabyl(var_1, var_3) # 输出: # var_1 0 # ja 7 # nein 13
而期望输出是保留var_3=1的列并填充0:
var_1 0 1 ja 7 0 nein 13 0
解决方案:将交叉变量转为带指定水平的因子
tabyl的show_missing_levels参数仅对因子类型的变量生效,因此需要先把交叉变量转换为因子,并明确指定所有需要显示的水平,再调用tabyl:
方法1:先转换变量类型再调用tabyl
library(janitor) library(dplyr) df2 %>% mutate(var_3 = factor(var_3, levels = c(0, 1))) %>% # 指定var_3的所有可能水平 tabyl(var_1, var_3, show_missing_levels = TRUE)
方法2:在tabyl中临时转换变量
如果不想修改原数据的变量类型,可直接在tabyl的参数里转换:
df2 %>% tabyl(var_1, factor(var_3, levels = c(0, 1)), show_missing_levels = TRUE)
两种方法都会输出符合期望的结果,自动为无观测的水平填充0。
内容的提问来源于stack exchange,提问作者Sascha
相关产品推荐
相关产品推荐

