gpt4 book ai didi

r - ranging()对分组数据框不起作用

转载 作者:行者123 更新时间:2023-12-03 12:42:16 26 4
gpt4 key购买 nike

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


有什么想法为什么会这样呢?

最佳答案

它不起作用,因为您需要先按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


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

关于r - ranging()对分组数据框不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com