尝试理解dplyr函数- group_by

3
我正在尝试理解dplyr中的group_by函数的工作方式。我正在使用datasets包中附带的airquality数据集(链接)
我知道,如果按照以下方式操作,它应该按Temp变量的升序排列记录。
airquality_max1 <- airquality %>% arrange(Temp)

我看到了在airquality_max1中的情况。我现在想按照Month分组,并且按照Temp的升序排列记录。因此最终结果应该首先列出所有Month == 5的记录,按照Temp的升序排列。然后它应该列出所有Month == 6的记录,按照Temp的升序排列,依此类推。因此我使用以下命令:

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

然而,我发现结果仅按Temp的升序排列,而未按Month分组,即airquality_max1airquality_max2相等。我不确定为什么在arrange函数之前没有按Month进行分组。有人能帮我理解我在这里做错了什么吗?
除了试图按列对数据框进行排序的问题外,我还试图理解group_by的行为,因为我正在尝试将其用于向某人解释group_by的应用。

1
也许你还需要在 arrange 中添加 Month 参数。airquality_max2 <- airquality %>% arrange(Month, Temp) - Ronak Shah
排序不是聚合,因此无需使用 group_by... - MichaelChirico
我试图将其作为一个教条式的例子来展示 group_by 的应用,但却遇到了这种行为。 - Satya
可能是如何按列对数据框进行排序?的重复问题。 - Ronak Shah
1个回答

4

arrange 不考虑 group_by,请参见 dplyr 0.5.0 上的 重大变更。如果你需要按两列排序,你可以这样做:

airquality %>% arrange(Month, Temp)

对于分组数据框,您还可以使用 .by_group 变量来先按组变量进行排序。
airquality %>% group_by(Month) %>% arrange(Temp, .by_group = TRUE)

谢谢您的快速回答。这个链接很有帮助,虽然这种行为有些违反直觉,但只要它不再改变,那就没问题了。 - Satya
airquality %>% group_by(Month) %>% arrange(Temp, .by_group = TRUE) 给我报错了。Error in arrange_impl(.data, dots) : incorrect size (1), expecting : 153 你知道为什么吗? - Ronak Shah
你可能认为需要按组变量排序,但通常情况下不需要,只要排序算法是稳定的(我相信它们都是),你可以使用group_by %>% arrangearrange %>% group_by。仅使用group_by将按组变量对数据框进行排序。因此,即使您没有明确告诉它,实际上仍在通过组变量和排序变量对数据框进行排序。 - Psidom
@RonakShah 我不确定。在我的机器上似乎运行良好。 - Psidom
@RonakShah - 我第一次运行时出现错误,再次运行后就可以正常工作了。 - Satya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接