按降序排列连续数据

Ranking continuous data in decreasing order

我有这样一个数据框:

set.seed(123)
df0 <- data.frame(x1 = rnorm(5, 0.1, 1), 
                  x2 = rnorm(5, 0.0, 1),
                  x3 = rnorm(5, 0.3, 1),
                  x4 = rnorm(5, 0.2, 1))
df0
          x1         x2         x3         x4
1 -0.4604756  1.7150650  1.5240818  1.9869131
2 -0.1301775  0.4609162  0.6598138  0.6978505
3  1.6587083 -1.2650612  0.7007715 -1.7666172
4  0.1705084 -0.6868529  0.4106827  0.9013559
5  0.2292877 -0.4456620 -0.2558411 -0.2727914

我想按行对所有列中的数据进行排名。我知道如何按 升序 对它们进行排名,即,第 1 位分配给最小值,第 2 位分配给第二小的值,等等:

df <- t(apply(df0, 1, rank))
df
     x1 x2 x3 x4
[1,]  1  3  2  4
[2,]  1  2  3  4
[3,]  4  2  3  1
[4,]  2  1  3  4
[5,]  4  1  3  2

但我不知道如何降序排列。有什么诀窍?

干脆在df0前加个负号:

t(apply(-df0, 1, rank))
#     x1 x2 x3 x4
#[1,]  4  2  3  1
#[2,]  4  3  2  1
#[3,]  1  3  2  4
#[4,]  3  4  2  1
#[5,]  1  4  2  3