如何在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
相关产品推荐
相关产品推荐

