Formatting data for a chi square test in R
我正在尝试重新格式化我的数据以在r中运行卡方检验。我的数据在第一列中设置有我的自变量,而在其他两列中设置了我的自变量组的计数。我在这里举例说明了数据格式。
1 2 3 4 5 6 7 | > example <- data.frame(category = c("x","y","x","y"), true = c(2,4,6,3), false = c(7,9,3,5)) > example category true false 1 x 2 7 2 y 4 9 3 x 6 3 4 y 3 5 |
据我所知chisq.test函数无法处理这种格式的数据,所以我认为我需要重新格式化数据以使其看起来像下面的"好例子",才能运行该函数。我的问题是我不确定对大型数据集进行数据透视的简单方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | > good_example <- data.frame(category = c('x','x','y','y','x','x','y','y'), variable = c('true','false','true','false','true','false','true','false'), count = c(2,7,4,9,6,3,3,5)) > good_example category variable count 1 x true 2 2 x false 7 3 y true 4 4 y false 9 5 x true 6 6 x false 3 7 y true 3 8 y false 5 > tab <- tapply(good_example$count, list(good_example$category, good_example$variable), FUN=sum) > chisq.test(tab, correct = FALSE) Pearson's Chi-squared test data: tab X-squared = 0.50556, df = 1, p-value = 0.4771 |
如果只需要根据x和y总结所有对与错,则:
1 2 | tab = do.call(rbind,by(example[,-1],example$category,colSums)) chisq.test(tab,correct=FALSE) |
一种更紧凑的版本(由@markus指出),您可以根据类别拆分数据,并将sum函数应用于除拆分列之外的所有列:
1 | tab = aggregate(.~category, example, sum) |
或者也许是dplyr / tidyr版本:
1 2 3 | library(dplyr) tab = example %>% group_by(category) %>% summarise_all(sum) chisq.test(tab[,-1],correct=FALSE) |