【问题标题】:Arrange within a group with dplyr使用 dplyr 在组内安排
【发布时间】:2017-10-05 13:23:41
【问题描述】:

我正在使用库(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

记录按降序排列,但不在组内。

这是为什么呢?应该怎么做才能更正代码?您的建议将不胜感激。

#

编辑

#

按照 cmets 中提出的建议,我仍然没有得到我想要的东西,即在每个月-日分组中,按照出发延误的降序排列前 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

【问题讨论】:

  • 将您不想排序的列名添加到arrange?
  • 从技术上讲,它们是在各自的组中排序的。你的意思是你也想按月和天来安排它们,这就是大卫上面的建议。 ^

标签: r sorting group-by dplyr


【解决方案1】:

您需要添加.by_group=T 才能在组内进行排列。

flights %>%
   group_by(month, day) %>%
   top_n(3, dep_delay) %>%
   arrange(dep_delay, .by_group = TRUE)

【讨论】:

    【解决方案2】:

    我认为您的第二个示例中的问题是您同时在所有变量上使用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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 2018-12-22
      • 2021-08-28
      相关资源
      最近更新 更多