在R base的数据框中按行排列数值

Ranking numerical values by row in data frame in R base

我正在尝试按数据框中的行对连续值进行排名。例如,从这个数据框

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  2.1540546 -0.95349328  0.06747390  1.4737404
2  0.1284843 -1.41162850  0.02273785 -0.9432357
3 -0.5162803  0.03551863  0.09552951 -0.1144275
4 -0.5455716  0.19596625 -0.71353323  0.3566051
5  0.6864848  0.22596630  0.91770037 -0.4423302

我想获得这个排名(取最低值1,次低值2,依此类推):

df1_ranked
  x1_ranked x2_ranked x3_ranked x4_ranked x5_ranked
1         4         4         1         2         3
2         1         1         3         3         2
3         2         3         4         1         4
4         3         2         2         4         1

我想不出任何简单的解决方案来完成这项任务。非常感谢您的想法!

一个选项是使用 apply 遍历行 (MARGIN = 1) 并使用 rank

t(apply(df0, 1, rank))

或从matrixStats转换为matrix

后使用rowRanks
library(matrixStats)
rowRanks(as.matrix(df0))