2017-09-05 86 views
3

我想了解group_by函数的工作方式dplyr。我正在使用airquality数据集,它与datasetslink一起提供。试图了解dplyr函数 - group_by

我理解是,如果我做到以下几点,就应该安排在Temp可变

airquality_max1 <- airquality %>% arrange(Temp) 

递增的顺序记录我看到在airquality_max1的情况。我现在想按照Temp的顺序排列记录,但是按Month分组。所以最终结果应该首先按照Temp的升序排列Month == 5的所有记录。然后,它应该有Month == 6所有记录中增加Temp秩序等等,所以我用下面的命令

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

不过,我发现的是,结果仍然是增加的Temp顺序而已,不进行分组通过Month,即,airquality_max1airquality_max2是相等的。

我不知道为什么Month的分组没有发生在arrange函数之前。任何人都可以帮助我理解我在这里做错了什么?

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

+1

也许你还需要在'arrange'中添加'Month'参数。 'airquality_max2 < - airquality%>%arrange(Month,Temp)' –

+0

排序不是聚合,所以没有必要使用'group_by' ... – MichaelChirico

+0

我试图用这个作为迂腐的例子来显示'group_by',但偶然发现这种行为。 – SN248

回答

4

arrange忽略group_by,参见dplyr0.5.0上的break-changes。如果您需要两列命令,你可以这样做:

airquality %>% arrange(Month, Temp) 

分组数据帧,也可以.by_group变量排序组变量第一

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

感谢您的快速回答。这个链接是有帮助的,这种行为是违反直觉的,但只要它不再改变,就没关系。 – SN248

+0

'airquality%>%group_by(Month)%>%arrange(Temp,.by_group = TRUE)'给我一个错误。 'arrange_impl错误(.data,dots):大小不正确(1),期望:153'为什么? –

+0

您可能认为您需要按组变量排序,但通常您不需要,只要排序算法稳定(我相信它们是),您可以执行'group_by%>%排列'或'排列%>%group_by'。 'group_by'本身将通过组变量对数据框进行排序。因此,即使您没有明确告诉它,仍然可以通过组变量和排序变量对数据框进行排序。 – Psidom