使用dplyr在一组内进行排列

20

我正在使用库(nycflights13),并使用以下命令按月份和日期对其进行分组,选择每个组中的前3行,然后按出发延误时间在每个组内降序排序。 代码如下:

flights %>% group_by(month, day)  %>% top_n(3, dep_delay) %>% arrange(desc(dep_delay))

它返回以下输出:

    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin  dest
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl>   <chr>  <int>   <chr>  <chr> <chr>
1   2013     1     9      641            900      1301     1242           1530      1272      HA     51  N384HA    JFK   HNL
2   2013     6    15     1432           1935      1137     1607           2120      1127      MQ   3535  N504MQ    JFK   CMH
3   2013     1    10     1121           1635      1126     1239           1810      1109      MQ   3695  N517MQ    EWR   ORD
4   2013     9    20     1139           1845      1014     1457           2210      1007      AA    177  N338AA    JFK   SFO
5   2013     7    22      845           1600      1005     1044           1815       989      MQ   3075  N665MQ    JFK   CVG
6   2013     4    10     1100           1900       960     1342           2211       931      DL   2391  N959DL    JFK   TPA
记录按降序排序,但组内没有排序。
为什么会这样?如何更正代码?谢谢你的建议。
#
编辑
#
根据评论中提出的建议,我仍然没有得到我想要的结果,即在每个月-日分组内按照出发延迟时间的降序对前3条记录进行排序。
flights %>% group_by(month, day)  %>% top_n(3, dep_delay) %>% arrange(desc(month, day,  dep_delay))

   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin  dest
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl>   <chr>  <int>   <chr>  <chr> <chr>
1   2013    12     1      657           1930       687     1010           2249       681      DL   1091  N342NW    JFK   SAT
2   2013    12     1     1504           1056       248     1628           1230       238      EV   5309  N615QX    LGA   BGR
3   2013    12     1     2017           1455       322     2146           1609       337      DL   1164  N6704Z    JFK   BOS
4   2013    12     2     1139            745       234     1358           1012       226      DL    807  N935AT    EWR   ATL
5   2013    12     2     1823           1345       278     2123           1640       283      UA   1510  N75861    EWR   IAH
6   2013    12     2     1842           1428       254     1955           1545       250      EV   5712  N827AS    JFK   IAD
7   2013    12     3      920            600       200     1158            846       192      B6    583  N535JB    JFK   MCO
8   2013    12     3     1424           1114       190     1713           1347       206      UA    405  N437UA    LGA   DEN
9   2013    12     3     2300           1935       205      116           2203       193      FL   1346  N964AT    LGA   ATL
10  2013    12     4     1210            829       221     1440           1055       225      EV   4419  N23139    EWR   XNA

1
将您想要排序的列名添加到 arrange 中? - David Arenburg
从技术上讲,它们已经按组进行了排序。你的意思是你还想按月份和日期进行排列,这就是David在上面建议的。^ - Sotos
2个回答

32
只需将.by_group = TRUE参数添加到arrange函数中即可。
flights %>%
   group_by(month, day) %>%
   top_n(3, dep_delay) %>%
   arrange(dep_delay, .by_group = TRUE)


15

我认为你第二个例子中的问题在于同时对所有变量使用了 desc ,因此它只应用于 month 列。

   flights %>% group_by(month, day)  %>% top_n(3, dep_delay) %>% 
        arrange(
            month, 
            day,  
            desc(dep_delay)
        )

Source: local data frame [1,108 x 19]
Groups: month, day [365]

    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl>   <chr>  <int>   <chr>  <chr>
1   2013     1     1      848           1835       853     1001           1950       851      MQ   3944  N942MQ    JFK
2   2013     1     1     2343           1724       379      314           1938       456      EV   4321  N21197    EWR
3   2013     1     1     1815           1325       290     2120           1542       338      EV   4417  N17185    EWR
4   2013     1     2     2131           1512       379     2340           1741       359      UA    488  N593UA    LGA
5   2013     1     2     1607           1030       337     2003           1355       368      AA    179  N324AA    JFK
6   2013     1     2     1412            838       334     1710           1147       323      UA    468  N474UA    EWR
7   2013     1     3     2056           1605       291     2239           1754       285      9E   3459  N928XJ    JFK
8   2013     1     3     2008           1540       268     2339           1909       270      DL   2027  N338NW    JFK
9   2013     1     3     2012           1600       252     2314           1857       257      B6    369  N558JB    LGA
10  2013     1     4     2123           1635       288     2332           1856       276      EV   3805  N29917    EWR
# ... with 1,098 more rows, and 6 more variables: dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
#   time_hour <dttm>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接