Chapter 8 分群分析group_by()
第一部分
分群分析與群內排序
group_by()
函數會由原本資料集產生一個新的分群過的資料集,通常會與summarise
函數一起運用。可以直接理解為group by certain variable。
- 用group_by函數看看「哪一家航空公司(carrier)」的「平均起飛延遲」最嚴重?
flights %>% group_by(carrier) %>%
summarise_at(vars(dep_delay), funs(mean), na.rm = T) %>%
arrange(desc(dep_delay)) %>% rename(dep_delay_mean = dep_delay)
## # A tibble: 16 x 2
## carrier dep_delay_mean
## <chr> <dbl>
## 1 F9 20.2
## 2 EV 20.0
## 3 YV 19.0
## 4 FL 18.7
## 5 WN 17.7
## 6 9E 16.7
## 7 B6 13.0
## 8 VX 12.9
## 9 OO 12.6
## 10 UA 12.1
## 11 MQ 10.6
## 12 DL 9.26
## 13 AA 8.59
## 14 AS 5.80
## 15 HA 4.90
## 16 US 3.78
- 可以設定多個分組依據
# 我想要知道個別`航空公司(carrier) `,哪些`航班路線(Flight number)`起飛通常比較容易遇到延遲?
flights %>% group_by(carrier, flight) %>%
summarise_at(vars(dep_delay), funs(mean), na.rm = T) %>%
arrange(desc(dep_delay)) %>% rename(dep_delay_mean = dep_delay)
## # A tibble: 5,725 x 3
## # Groups: carrier [16]
## carrier flight dep_delay_mean
## <chr> <int> <dbl>
## 1 WN 521 346
## 2 DL 390 334
## 3 DL 809 298
## 4 UA 1510 278
## 5 EV 5478 242
## 6 EV 5117 219
## 7 9E 3760 217
## 8 EV 5855 209
## 9 WN 1019 203
## 10 WN 217 195
## # ... with 5,715 more rows
- 我想要知道1~12月份,「每個月份」的「各個日期」,航班「平均起飛延遲」嚴重程度比較?(group_by + arrange組合技)
#意思就是,群內(或者說組內)排序怎麼做?
#請查詢 Help,重點是arrange函數裡面的 .by_group 參數
flights %>% group_by(month, day) %>%
summarise_at(vars(dep_delay), funs(mean), na.rm = T) %>%
arrange(desc(dep_delay), .by_group = T)
## # A tibble: 365 x 3
## # Groups: month [12]
## month day dep_delay
## <int> <int> <dbl>
## 1 1 31 28.7
## 2 1 30 28.6
## 3 1 16 24.6
## 4 1 25 21.9
## 5 1 13 19.9
## 6 1 24 19.5
## 7 1 28 15.1
## 8 1 2 13.9
## 9 1 22 12.5
## 10 1 1 11.5
## # ... with 355 more rows
範例
若完成,請直接貼到open chat
若有一位買家對於這32台車子很有興趣,特別是在省油表現(Miles/(US) gallon, mpg),以及馬力表現(hp, Gross horsepower)有很大的興趣,你要整理哪些資料?
後來他希望能夠買到馬力性能比較強的車,他要求你將馬力表現高於平均的車款額外整理給他,應該怎麼做呢?
假設這位買家最近試駕了很多台車款,閒聊時候偶然跟你分享他獨家的選車know-how,標準是省油表現(Miles/(US) gallon,mpg)數字的十倍,再加上馬力表現的總和,越高越好,請問哪一台車應該是他的心頭好?
要成交前,該位買家因為莫名原因心情好,決定要買他挑選標準該數據的前三名,請問你應該給他哪三台車的最終報價?
服務完這位客戶後,發現自己累積了不少經驗,也留意到汽缸數多寡與馬力有一定關聯性,閒來之餘想要整理一下相同汽缸數下,不同車款的馬力比較表作為往後參考,請問該怎麼做?
mtcars
mtcars %>% group_by(cyl) %>% arrange(desc(hp), .by_group = T)
自主練習
- (延續上一題)休士頓火箭隊,各個守備位置各有多少人?
- 隊(Team)、守備位置(Position)是兩個分組條件
- 計算row(或者說樣本個數),可以用n(), number of values/rows,可參考dplyr cheatsheet