R中有没有一种方法可以使用带有多个条件和ties.method的rank函数(或类似的函数)?
通常,排名用于对向量中的值进行排名,如果存在联系,您可以使用其中一种联系方法(“平均”、“随机”、“第一”……)。但是当对矩阵中的一列进行排名时,我想使用多列and关系方法之一。
一个最小的例子:
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
y <- c(1, 4, 5, 5, 2, 8 ,8, 1,3, 3)
z <- c(0.2, 0.8, 0.5, 0.4, 0.2, 0.1, 0.1, 0.7, 0.3, 0.3)
m <- cbind(x=x,y=y, z=z)
想象一下我想对y
- 上述矩阵中的值。但如果有联系,我希望该功能能够查看z
-价值观。如果之后仍然有联系,那么我想使用ties.method = "random"
-范围。
换句话说,可能的结果可能是:
x y z
[1,] 1 1 0.2
[2,] 8 1 0.7
[3,] 5 2 0.2
[4,] 9 3 0.3
[5,] 10 3 0.3
[6,] 2 4 0.8
[7,] 4 5 0.4
[8,] 3 5 0.5
[9,] 6 8 0.1
[10,] 7 8 0.1
但也可能是这样的:
x y z
[1,] 1 1 0.2
[2,] 8 1 0.7
[3,] 5 2 0.2
[4,] 10 3 0.3
[5,] 9 3 0.3
[6,] 2 4 0.8
[7,] 4 5 0.4
[8,] 3 5 0.5
[9,] 7 8 0.1
[10,] 6 8 0.1
请注意第四行和第五行有何不同(就像第九行和第十行一样)。我已经能够得到上述结果order
- 函数(即m[order(m[,2], m[,3], sample(length(x))),]
,但我想接收排名值,而不是排序矩阵的索引。
如果您需要详细说明为什么我需要排名值,请随时询问,我将使用额外的详细信息编辑问题。现在我认为最小的例子就可以了。
EDIT:正如 @alistaire 指出的那样,将数据框更改为矩阵。