You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用mutate()和filter()按rate排序?为何Maryland排名4在Missouri前?

问题1:如何仅使用mutate()和filter()函数对数据集按rate字段进行排序?

mutate()和filter()本身不是专门的排序工具——mutate()负责添加/修改列,filter()负责筛选行,两者都不会改变数据集的行顺序。不过可以通过以下方式间接实现类似排序的效果:

  1. 先用mutate()添加一个基于rate的排名列,比如按降序排名:
    data <- data %>% mutate(rank = rank(-rate))
    
  2. 若必须仅用mutate()和filter(),可以生成排序索引列,再结合行号筛选:
    # 按rate降序排序
    sorted_data <- data %>%
      mutate(sort_idx = order(-rate)) %>%
      filter(row_number() %in% sort_idx)
    
    不过这种方式本质依赖原数据集的行号映射,不如直接用arrange()函数直观。
问题2:执行给定R代码后,排名为4的Maryland为何出现在排名为3的Missouri之前?

核心原因是:filter()函数只会筛选符合条件的行,但不会改变原数据集的行顺序。原数据集中Maryland的行本来就在Missouri的前面,所以即使rank列显示Maryland是第4、Missouri是第3,筛选后的结果还是保留了原数据的行顺序。

如果想要让结果按rank列排序,需要在filter()之后加上arrange(rank):

murders <- mutate(murders, rate = total/population*100000, rank = rank(-rate))
filter(murders, rank <= 5) %>% arrange(rank)

这样输出的结果就会按rank从1到5依次排列了。

内容的提问来源于stack exchange,提问作者mit_ran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:27:06