1.rank函数是什么
rank相关文档[1]可以译为"返回原数组(?)中各个元素排序(?)后的秩次(?)",表面上看确实可以得到次序,但对数组、排序、秩次交待不清。
2.rank函数使用情景
比如,在100米赛跑中,甲乙丙三人的成绩为6.8s, 8.1s, 7.2s,那么用rank函数排序获得名次:
> rank(t <- c(6.8, 8.1, 7.2))
[1] 1 3 2
再如,甲乙丙三人考试得分为74,92,85,用同样方法取得名次会适得其反。当然,我们可以认为执行
> rank(-(s <- c(74, 92, 85)))
[1] 3 1 2
可以达到目的,但这并未改变rank函数的排序机制。
3.rank函数排序类型
rank(x, na.last = TRUE,
ties.method = c("average", "first", "random", "max", "min"))
> t <- c(4, NaN, 4, 7, 8, 2, NaN, 9, 9, 7, NaN, 5, 2, 2, 1) #同时对相应元素做好标记 > names(t) <- letters[1 : length(t)]
通过以上方法进行排序,得出
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | |
original | 4 | NaN | 4 | 7 | 8 | 2 | NaN | 9 | 9 | 7 | NaN | 5 | 2 | 2 | 1 |
average | 5.5 | 13.0 | 5.5 | 8.5 | 10.0 | 3.0 | 14.0 | 11.5 | 11.5 | 8.5 | 15.0 | 7.0 | 3.0 | 3.0 | 1.0 |
first | 5 | 13 | 6 | 8 | 10 | 2 | 14 | 11 | 12 | 9 | 15 | 7 | 3 | 4 | 1 |
random (1) | 6 | 13 | 5 | 9 | 10 | 2 | 14 | 11 | 12 | 8 | 15 | 7 | 3 | 4 | 1 |
random (2) | 5 | 13 | 6 | 8 | 10 | 2 | 14 | 11 | 12 | 9 | 15 | 7 | 4 | 3 | 1 |
max | 6 | 13 | 6 | 9 | 10 | 4 | 14 | 12 | 12 | 9 | 15 | 7 | 4 | 4 | 1 |
min | 5 | 13 | 5 | 8 | 10 | 2 | 14 | 11 | 11 | 8 | 15 | 7 | 2 | 2 | 1 |
我们发现,标签"b","g","k"的次序并未发生改变,可推断ties.method作用在于处理非缺失值的顺序。
不妨参考rank的实现代码
function (x, na.last = TRUE, ties.method = c("</