【问题标题】:arrange() not working on grouped data frame安排()不适用于分组数据框
【发布时间】:2014-11-29 22:43:49
【问题描述】:

假设我有以下代码。最后一步,我尝试排列,代码不起作用,数据框继续按cyl升序排列。

library(dplyr)
# create a grouped data frame
df <- group_by(mtcars,cyl)
# rank car from best mpg to worst for every cyl
df <- mutate(df,rank = row_number(mpg)) 
# top 3 best mpg for each cyl
df <- filter(df,rank <= 3) 
# arrange by the number of cyl
df <- arrange(df,desc(cyl), rank) 

对为什么会发生这种情况有任何想法吗?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这不起作用,因为您需要先ungroup() 数据,然后才能按cyl 排列。您正在使用的代码尝试订购cyl 列,而它仍按cyl 分组。由于这些值都是相同的(在每个组内),因此没有任何变化。

    排序后按cyl排列整个数据,需要先去掉分组,然后再运行arrange()

    library(dplyr)
    
    group_by(mtcars, cyl) %>%                ## group by cylinder
        mutate(rank = row_number(mpg)) %>%   ## rank by mpg
        filter(rank <= 3) %>%                ## top three for each cyl
        arrange(rank) %>%                    ## arrange each group by rank
        ungroup() %>%                        ## remove grouping
        arrange(desc(cyl))                   ## arrange all by cylinder (descending)
    
    #    mpg cyl  disp  hp drat    wt  qsec vs am gear carb rank
    # 1 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4    1
    # 2 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4    2
    # 3 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4    3
    # 4 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4    1
    # 5 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1    2
    # 6 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4    3
    # 7 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2    1
    # 8 21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1    2
    # 9 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1    3
    

    附带说明一下,我建议您考虑使用 %&gt;% 函数将这些调用链接在一起,因为它将大大减少使用 &lt;- 进行的分配。

    【讨论】:

    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多