使用dplyr进行Chi-square test(卡方检验)报错的解决求助
问题解决步骤
首先修正你的dataframe构造错误:
你写的rep(29, 17, 36)是错误用法,rep()函数的参数逻辑是rep(目标值, 重复次数),你想生成三个独立数值,应该用c()而非rep():
data = data.frame(group = c("conse", "dem", "schoo"), f = c(43, 30, 36), m = c(29, 17, 36))
然后解决卡方检验的报错问题:chisq.test()要求输入纯数值型的列联表,而你的原dataframe包含字符型的group列,直接传入会导致sum函数无法处理字符类型,触发报错。解决方法是只传入男女数值列:
方法1:用dplyr筛选数值列后做检验
library(dplyr) data_chi = data %>% select(f, m) %>% # 只保留男女计数的数值列 chisq.test()
方法2:直接提取数值列传入
data_chi = chisq.test(data[, c("f", "m")])
方法3:将group设为行名后用数值表检验
如果你需要保留分组信息作为行标签,可以先设置行名再去掉字符列:
rownames(data) = data$group data_num = data[, -1] # 移除group列 data_chi = chisq.test(data_num)
执行上述任意方法后,就可以正常得到卡方检验的结果了。你之前转成tibble无效,是因为tibble只是数据结构不同,并没有移除字符型的group列,所以问题根源没解决。
内容的提问来源于stack exchange,提问作者gaelle
相关产品推荐
相关产品推荐

