首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >arrange()不适用于分组的数据帧

arrange()不适用于分组的数据帧
EN

Stack Overflow用户
提问于 2014-11-30 06:43:50
回答 1查看 9.4K关注 0票数 19

假设我有以下代码。在最后一步中,我尝试对其进行排列,但代码不起作用,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) 

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-30 06:59:40

它不起作用,因为您需要在按cyl排列之前对数据执行ungroup()操作。您正在使用的代码尝试在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

顺便说一句,我建议您考虑使用%>%函数将这些调用链接在一起,因为它将大大减少使用<-进行的赋值。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27207963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档