排名函数与R

时间:2017-11-15 14:47:49

标签: r

当我读到关于秩函数时,它有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个不同的值)...

我认为排名在这种情况下无法正常运作。

1 个答案:

答案 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