在 R 中的多列上对每行进行排名

Rank per row over multiple columns in R

我正在使用 R 来分析我的硕士论文。不幸的是,我遇到了这个问题:

我想计算一个新变量,它计算许多变量中每行一个变量的排名。

示例:

1
2
3
4
V1    V2    V3   NewVariable_V1 NewVariable_V2 NewVariable_V3
11    21    35   3              2               1
22    12    66   2              3               1
44    22    12   1              2               3


您正在寻找排名。要获得降序,首先否定 data.frame.

1
2
3
4
5
data.frame(d, t(apply(-d, 1, rank, ties.method='min')))
#   V1 V2 V3 V1.1 V2.1 V3.1
# 1 11 21 35    3    2    1
# 2 22 12 66    2    3    1
# 3 44 22 12    1    2    3

?rank 看看如何处理平局。

1
2
3
4
5
6
7
8
x <- cbind(a=c(11,22,44),
       b=c(21,12,22),
       c=c(35,66,12))
> x
      a  b  c
[1,] 11 21 35
[2,] 22 12 66
[3,] 44 22 12

2018-10-22 编辑

现在,排名

1
2
3
4
5
 t(apply(-x, 1, rank))
     a b c
[1,] 3 2 1
[2,] 2 3 1
[3,] 1 2 3

或列

1
2
3
4
5
apply(x, 2, rank)
     a b c
[1,] 3 1 3
[2,] 2 2 1
[3,] 1 3 2