R运行卡方检验前删除0值组别报错如何解决?
报错原因与解决方法
第一个报错 length of 'dimnames' [2] not equal to array extent 解决
这个报错的核心原因是:你筛选行后没有重新赋值给后续使用的数据集,且RaceCat为因子类型,筛选后编码4、5对应的空因子水平没有被清理,后续生成列联表时因子水平数和实际数据维度不匹配。
正确的筛选和因子水平清理代码如下:
library(dplyr) # 筛选掉编码为4、5的组别,同时删除RaceCat的空置因子水平 hivneg <- data %>% filter(!RaceCat %in% c(4, 5)) %>% # 仅清理RaceCat的空水平,不改动其他变量的因子水平,避免额外问题 mutate(RaceCat = droplevels(RaceCat))
第二个警告 longer argument not a multiple of length of shorter 解决
这个警告是因为生成列联表的两个变量RaceCat和PrEP2长度不一致,大概率是其中一个变量存在未处理的缺失值,或者你之前没有将筛选后的数据集正确赋值给hivneg。
按如下步骤处理即可:
- 先检查两个变量的长度是否一致,确认筛选后的数据集没问题
# 两行输出结果应当完全相等 length(hivneg$RaceCat) length(hivneg$PrEP2)
- 如果长度不一致,在筛选步骤补充缺失值清理逻辑即可:
hivneg <- data %>% filter(!RaceCat %in% c(4, 5)) %>% # 剔除两个变量有缺失的行 drop_na(RaceCat, PrEP2) %>% mutate(RaceCat = droplevels(RaceCat))
- 清理完成后再运行卡方检验即可正常输出结果:
a <- table(hivneg$RaceCat, hivneg$PrEP2) chisq.test(a, correct = F)
内容的提问来源于stack exchange,提问作者user16914149
相关产品推荐
相关产品推荐

