我有一个数据框,我想对其进行一些统计测试。但是,我想先根据其中一列对数据进行分组。
以下是一个示例数据框:
CATEGORY ITEM SHOP1 STOCK SHOP2 STOCK
Fruit Orange 5 9
Fruit Apple 12 32
Fruit Pear 17 6
Veg Carrots 59 72
Veg Potatoes 6 57
Veg Courgette 43 22
Veg Parsnips 5 9
... ... ... ...
因此,对于这个例子,我想查看chi平方分布但是跨类别 - 所以我想将数据减少到这样的表:
SHOP1 SHOP2
FRUIT 34 47
VEG 113 160
表格显示每个商店每个类别的库存总和(这是一个非常简化的版本 - 我已经运行到几百行的37个类别的数据),并且不再指定该项目,只是类别。
所以我认为我可以group_by(CATEGORY)
然后对分组数据运行chi平方测试,但这似乎不起作用。我想我需要将两列用数字加在一起,但我不知道如何与chi平方测试结合使用。我已经有一段时间没有运气了,所以我非常感谢你的帮助!
答案 0 :(得分:1)
将来,如果您编写了无效的代码及其输出,将会很有帮助。据我所知,您正在尝试基于数据框创建该表。那是对的吗?
以前的帖子已经很好地回答了这个问题:How to sum a variable by group?
从那篇文章来看,答案似乎是:
df %>% group_by(CATEGORY) %>% summarise(SHOP1 = sum(SHOP1), SHOP2 = sum(SHOP2))
答案 1 :(得分:1)
我们可以使用dplyr
汇总数据和tidy
包中的broom
函数,以便在数据框中返回chisq.test
的结果:
library(broom)
library(dplyr)
df %>% group_by(CATEGORY) %>%
summarise_at(vars(matches("SHOP")), sum) %>%
do(tidy(chisq.test(.[, grep("SHOP",names(.))])))
statistic p.value parameter method 1 2.566931e-30 1 1 Pearson's Chi-squared test with Yates' continuity correction