使用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