2016-10-20 90 views
4

我想在暑假期間查找最大與R中

max_flights_all_c<-nycflights13::flights %>% 
    group_by(carrier,month)%>% 
    filter(month==6 | month==7 | month==8 | month==9)%>% 
    summarise(n=n()) 

現在我越來越得到與航班的最大值載體dplyr;

carrier month n 
9E 7 1494 
9E 8 1456 
9E 9 1540 
AA 6 2757 
AA 7 2882 
AA 8 2856 
AA 9 2614 
AS 6 60 
AS 7 62 
AS 8 62 
AS 9 60 
B6 6 4622 
B6 7 4984 

但是隻想獲得每月月份的最大值n。

+1

'nycflights13 ::航班%>%的過濾器(一個月%在6%:9)%>%計(每月,載體)%>%總結(n = max(n))' – alistaire

回答

3

經過summarise步驟後,我們按'月'分組,得到'n'的max行與slice

max_flights_all_c <- nycflights13::flights %>% 
          group_by(carrier,month)%>% 
          filter(month %in% 6:9) %>% 
          summarise(n = n()) %>% 
          group_by(month) %>% 
          slice(which.max(n)) 
+1

我知道這個問題有一個dplyr標籤,但data.table解決方案縮短了2倍,速度提高了4倍。 – Henk

+0

@亨克這可能是真的, – akrun

+0

@亨克和10倍以下的可讀性,至少對我來說:-) – Eduardo

1

幸得@Henk一個更新的data.table解決方案:

setDT(nycflights13::flights)[month %between% c(6,9), .N, keyby = .(carrier, month)][, .SD[which.max(N)], month] 

    month carrier n 
1:  6  UA 4975 
2:  7  UA 5066 
3:  8  UA 5124 
4:  9  EV 4725 

原來的解決方案是在回答的修訂歷史記錄。

Microbencmark:(任何人誰在乎)

library(microbenchmark) 
microbenchmark(henk=setDT(nycflights13::flights)[month %between% c(6,9), .N, keyby = .(carrier, month)][, .SD[which.max(N)], month], 
       akrun=nycflights13::flights %>% 
       group_by(carrier,month)%>% 
       filter(month %in% 6:9) %>% 
       summarise(n = n()) %>% 
       group_by(month) %>% 
       slice(which.max(n))) 

Unit: milliseconds 
    expr  min  lq  mean median  uq  max neval 
    henk 5.612305 6.41659 7.416813 6.953205 7.515347 49.38172 100 
akrun 45.529320 47.51715 51.943065 48.882663 49.834458 221.39357 100 
+0

'航班[%c(6,9),.N,keyby =。(承運人,月份)] [,.SD [which.max(N)],月]之間的月份%' – Henk

+0

@亨克,這更清晰如果我爲未來的讀者更新答案,請介意並稍快些。 –

+0

邁克邁克... – Henk