2016-10-20 5 views
4

Я пытаюсь получить носитель с максимальным значением полетов в течение летних месяцевНайти максимум в группу с dplyr в R

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

теперь я получаю;

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 мы группируем «месяц» и получаем строку max «n» с 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 x короче и на 4 x быстрее. – Henk

+0

@Henk Это могло быть правдой, – akrun

+0

@Henk и 10 x менее читаемо, по крайней мере для меня :-) – 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 [who.max (N)], месяц]' – Henk

+0

@Henk это более понятно для меня и немного быстрее, если я уточню ответ для будущих читателей? –

+0

Вперед Майк ... – Henk

 Смежные вопросы

  • Нет связанных вопросов^_^