【问题标题】:Trying to understand dplyr function - group_by试图理解 dplyr 函数 - group_by
【发布时间】:2017-09-05 02:04:33
【问题描述】:

我试图了解group_by 函数在dplyr 中的工作方式。我正在使用 datasetslink 附带的 airquality 数据集。

我知道如果我执行以下操作,它应该按照Temp变量的升序排列记录

airquality_max1 <- airquality %>% arrange(Temp)

我看到airquality_max1 就是这种情况。我现在想通过增加Temp 的顺序排列记录,但按Month 分组。所以最终结果应该首先包含Month == 5 的所有记录,按Temp 的递增顺序排列。那么它应该有Month == 6的所有记录以Temp的递增顺序等等,所以我使用以下命令

airquality_max2 <- airquality %>% group_by(Month) %>% arrange(Temp)

但是,我发现结果仍然仅按Temp 的递增顺序排列,而不是按Month 分组,即airquality_max1airquality_max2 是相等的。

我不确定为什么 Month 分组不会在 arrange 函数之前发生。谁能帮我理解我在这里做错了什么?

除了尝试按列对数据框进行排序的问题之外,我还试图了解group_by 的行为,因为我试图用它来向某人解释group_by 的应用。

【问题讨论】:

  • 也许你还需要在arrange中添加Month参数。 airquality_max2 &lt;- airquality %&gt;% arrange(Month, Temp)
  • 排序不是聚合,所以不用group_by...
  • 我试图用这个作为一个迂腐的例子来展示group_by的应用,但偶然发现了这种行为。

标签: r dplyr


【解决方案1】:

arrange 忽略 group_by,参见 dplyr 0.5.0 上的 break-changes。如果您需要按两列排序,您可以这样做:

airquality %>% arrange(Month, Temp)

对于分组数据框,也可以.by_group变量先按组变量排序

airquality %>% group_by(Month) %>% arrange(Temp, .by_group = TRUE)

【讨论】:

  • 感谢您的快速回答。该链接很有帮助,这种行为是违反直觉的,但只要它不再改变,就可以了。
  • airquality %&gt;% group_by(Month) %&gt;% arrange(Temp, .by_group = TRUE) 给我一个错误。 Error in arrange_impl(.data, dots) : incorrect size (1), expecting : 153 知道为什么吗?
  • 你可能认为你需要按组变量排序,但通常你不需要,只要排序算法稳定(我相信他们是稳定的),你可以这样做group_by %&gt;% arrangearrange %&gt;% group_bygroup_by 本身将按组变量对数据框进行排序。因此,即使您没有明确告诉它,您仍然可以通过组变量和排序变量对数据框进行排序。
  • @RonakShah 我不确定。它似乎在我的机器上运行良好。
  • @RonakShah - 我第一次遇到错误,再次运行它,它工作正常。
猜你喜欢
  • 2014-06-04
  • 2018-05-12
  • 1970-01-01
  • 2021-02-14
  • 2015-11-18
  • 2019-12-20
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
相关资源
最近更新 更多