当我读到关于秩函数时,它有Ties.method来指定关系发生时会发生什么。
在此向量中:c(2,3,4,4,5,6),As Matt Krause建议:
平均值为每个关联元素分配"平均值"秩。因此,等级将是1,2,3.5,3.5,5,6
首先让"更早的"输入" win",所以排名按数字顺序排列(1,2,3,4,5,6)
min 将每个绑定元素分配到最低排名,因此您获得1,2,3,3,5,6
max 则相反:绑定元素获得最高排名(1,2,4,4,5,6)
随机随机打破关系,因此您可以获得(1,2,3,4,5,6)或(1,2,4,3,5,6)
但是,我需要这个输出:(1,2,3,3, 4 , 5 )。我能做些什么呢?
我想用输出填充另一个有5列的矩阵(X)。此实例的最终输出应为:(1,1,2,1,1),这意味着我们有2个排名第三的项目和其中一个。
现在,如果我们将(2,3,4,4,5,6)作为实例1而将(2,3,3,3,4,2)作为实例2,则在矩阵(X)中,它们将转换为:
(1,1,2,1,1)
(2,3,1,0,0)
(矩阵(X)的列数等于所有实例中唯一值的数量;考虑到所有数字都在2到6之间,这意味着我们总共有5个不同的值)...
我认为排名在这种情况下无法正常运作。
答案 0 :(得分:1)
可能有更高效/更短的方式来计算所有实例的并集的唯一值,但除此之外,这几乎与@whuber在评论中建议的一样:
测试用例:
instances <- list(c(2,3,4,4,5,6),c(2,3,3,3,4,2))
唯一棘手的部分是确保我们拥有所有级别,以便正确计算零点:
ulevs <- sort(unique(Reduce(union,instances)))
f <- function(x) {
table(factor(x,levels=ulevs))
}
应用并转换为矩阵:
t(sapply(instances,f))
## 2 3 4 5 6
## [1,] 1 1 2 1 1
## [2,] 2 3 1 0 0