在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))
我正在尝试按数据框中的行对连续值进行排名。例如,从这个数据框
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))