【问题标题】:Sum variable by group then run function按组求和变量然后运行函数
【发布时间】:2016-09-28 16:34:52
【问题描述】:

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

这是一个示例数据框:

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
  ...      ...         ...           ...

因此,对于这个示例,我想查看卡方分布但跨类别 - 所以我想将数据简化为如下表格:

          SHOP1 SHOP2
   FRUIT    34    47
     VEG   113   160

表格显示每个商店每个类别的库存总和(这是一个非常简化的版本 - 我的数据运行到 37 个类别超过几百行),不再指定项目,只是类别。

所以我想我可以group_by(CATEGORY) 然后对分组数据运行卡方检验,但这似乎不起作用。我想我需要将带有数字的两列相加,但我不知道如何结合卡方检验来做到这一点。我已经有一段时间没有运气了,所以我非常感谢您的帮助!

【问题讨论】:

  • 我没有丰富的经验,但也许purrr 包可能会有所帮助。
  • 您是否厌倦了 summarise() 函数中的卡方检验? group_by(x)%>%summarise(...

标签: r dplyr


【解决方案1】:

我们可以使用dplyr 来汇总数据,并使用broom 包中的tidy 函数在数据框中返回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

【讨论】:

    【解决方案2】:

    将来,如果您编写了不起作用的代码及其输出,将会很有帮助。据我了解,您正在尝试根据数据框创建该表。那是对的吗?

    之前的帖子已经很好地回答了这个问题:How to sum a variable by group?

    从那篇文章看来,答案似乎是:

    df %>% group_by(CATEGORY) %>% summarise(SHOP1 = sum(SHOP1), SHOP2 = sum(SHOP2))

    【讨论】:

    • 感谢您的回复。我试图根据数据框制作表格,然后在其上运行卡方。您给我的链接中的答案制作了表格,但是在表格上运行卡方然后给出错误all entries of 'x' must be nonnegative and finite
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2021-05-15
    相关资源
    最近更新 更多