2017-09-05 87 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