You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:27:04