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

《R for Data Science》中排序函数示例的技术疑问咨询

R中排序函数的疑问解答

先回顾示例代码:

y <- c(1, 2, 2, NA, 3, 4)
min_rank(y)
#> [1]  1  2  2 NA  4  5
min_rank(desc(y))
#> [1]  5  3  3 NA  2  1 
row_number(y)
#> [1]  1  2  3 NA  4  5 
dense_rank(y)
#> [1]  1  2  2 NA  3  4 
percent_rank(y)
#> [1] 0.00 0.25 0.25   NA 0.75 1.00 
cume_dist(y)
#> [1] 0.2 0.6 0.6  NA 0.8 1.0

具体疑问解答

1. min_rank函数:结果中的5来自哪里?为何NA没有排在最后?

  • min_rank的核心规则是:给相同值分配最小的可能排名,排名会跳过重复值占用的位置。
    对y的非NA值从小到大看:1是第1名;两个2占了第2、3名;3就只能排第4名;4自然是第5名,所以结果里4对应的排名是5。
  • NA的处理:min_rank默认保留NA在原始向量中的位置,不会自动将其排到末尾。如果需要把NA放最后,可添加参数min_rank(y, na.last = TRUE)。

2. min_rank(desc(y)):结果中为何出现两个3而非两个2?

  • desc(y)会把y倒序处理,倒序后的非NA值为4,3,2,2,1。
  • 按照min_rank的规则,倒序后相同值取最小排名:
    • 4是最大的,排第1;
    • 3排第2;
    • 两个2是倒序里的第三大值,它们的最小可能排名是3;
    • 1排第5。
      对应原始y的顺序,两个2的位置就会返回3,所以结果出现两个3。

3. row_number函数:仍对NA的位置存在困惑,且为何结果不是6个数值?

  • row_number的规则是给每个非NA值分配唯一的连续排名,即使值重复也会得到不同序号,相当于给非NA值按出现顺序编位置号。
  • 结果里其实是6个元素:5个数值+1个NA。NA的位置会直接返回NA,不会被替换成数字,所以看起来像是少了一个数值,但实际长度和原向量一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:15:39