按组求和变量然后运行函数

时间:2016-09-28 16:34:52

标签: r dplyr

我有一个数据框,我想对其进行一些统计测试。但是,我想先根据其中一列对数据进行分组。

以下是一个示例数据框:

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平方测试结合使用。我已经有一段时间没有运气了,所以我非常感谢你的帮助!

2 个答案:

答案 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