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

如何在R中彻底排除变量类别以构建2×2列联表?

解决因子水平残留导致的2×2列联表构建问题

问题根源在于你把group定义为因子时预先包含了Unknown水平——就算用subset或filter筛掉了对应行,因子的预定义水平不会自动消失,所以统计表格里还会保留这个水平并显示0计数。

直接上解决办法:

方法1:用droplevels()移除未使用的因子水平

筛选完数据后,对group变量执行droplevels(),它会自动删掉没有数据的水平:

data$group <- factor(data$group, 
                 levels=c("No", "Yes", "Unknown"), 
                 labels=c("LR", "HR", "Unknown"))
data2 <- subset(data, !(group=="Unknown"))
# 移除未使用的因子水平
data2$group <- droplevels(data2$group)
# 再次生成表格验证
table(data2$group)
table(data2$parous, data2$group)

这时输出的表格就只会保留LR和HR两个水平,不会出现Unknown的0计数了。

方法2:筛选后重新定义因子水平

如果不想用droplevels(),也可以直接重新指定group的因子水平:

data2$group <- factor(data2$group, levels = c("LR", "HR"))

这样也能直接去掉残留的Unknown水平。

方法3:dplyr+forcats组合(适合tidyverse用户)

如果你习惯用dplyr的filter,可以搭配forcats包的fct_drop()一步完成筛选和去水平:

library(dplyr)
library(forcats)

data2 <- data %>%
  filter(group != "Unknown") %>%
  mutate(group = fct_drop(group))

处理完成后,就可以正常运行卡方检验了,比如:

chisq.test(table(data2$parous, data2$group))

内容的提问来源于stack exchange,提问作者Arps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:12:13