Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R中的dplyr查找每个组的最大值_R_Dplyr - Fatal编程技术网

使用R中的dplyr查找每个组的最大值

使用R中的dplyr查找每个组的最大值,r,dplyr,R,Dplyr,我正试图让航空公司在夏季的几个月里有最大的航班价值 max_flights_all_c<-nycflights13::flights %>% group_by(carrier,month)%>% filter(month==6 | month==7 | month==8 | month==9)%>% summarise(n=n()) 但是每个月只想获得n的最大值。在总结步骤之后,我们按“月”分组,并使用切片获得“n”的max行 max_flight

我正试图让航空公司在夏季的几个月里有最大的航班价值

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

但是每个月只想获得n的最大值。

总结
步骤之后,我们按“月”分组,并使用
切片
获得“n”的
max

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))
max\u flights\u all\u c%
分组依据(承运人,月份)%>%
筛选器(月份百分比在%6:9中)%>%
总结(n=n())%>%
分组单位(月)%>%
切片(哪个最大值(n))

更新的
数据归功于@Henk。表
解决方案:

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:(面向任何关心此事的人)


nycflights13::flights%%>%filter(月百分比在%6:9中)%%>%count(月,承运人)%%>%summary(n=max(n))
。就像在任何一个软件包中一样,你必须投入一些时间来理解事情是如何运作的。data.table的工作原理非常类似于SQL。正如您在Mike H的基准测试中所看到的,data.table要快得多。@Henk当然同意<代码>航班[月百分比介于%c(6,9),.N,keyby=(承运人,月)][,.SD[which.max(N)],月]@Henk这对我来说更清楚,速度稍微快一点,介意我为将来的读者更新答案吗?
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
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