Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
秩函数与R中的预期输出不一致_R - Fatal编程技术网

秩函数与R中的预期输出不一致

秩函数与R中的预期输出不一致,r,R,正如我读到的rank函数一样,它有Ties.method来指定出现Ties时发生的事情 在该向量中:c(2,3,4,4,5,6),建议如下: average为每个绑定元素分配“平均”等级。因此,职级将为1、2、3.5、3.5、5、6 首先让“较早”的条目“获胜”,因此排名按数字顺序排列(1,2,3,4,5,6) min将每个绑定元素分配到最低级别,因此得到1,2,3,3,5,6 max则相反:并列元素的排名最高(1,2,4,4,5,6) random随机中断联系,因此您可以得到(1,2,3,4,

正如我读到的rank函数一样,它有Ties.method来指定出现Ties时发生的事情

在该向量中:c(2,3,4,4,5,6),建议如下:

average为每个绑定元素分配“平均”等级。因此,职级将为1、2、3.5、3.5、5、6

首先让“较早”的条目“获胜”,因此排名按数字顺序排列(1,2,3,4,5,6)

min将每个绑定元素分配到最低级别,因此得到1,2,3,3,5,6

max则相反:并列元素的排名最高(1,2,4,4,5,6)

random随机中断联系,因此您可以得到(1,2,3,4,5,6)或(1,2,4,3,5,6)

但是,我需要这个输出:(1,2,3,3,45)。我能为此做些什么

我想用输出填充另一个矩阵(X),它有5列。这个实例的最终输出应该是:(1,1,2,1,1),这意味着我们有第三个排名项目中的2个和其余的一个

现在,如果我们将(2,3,4,4,5,6)作为实例1,将(2,3,3,4,2)作为实例2,在矩阵(X)中,它们将转换为:

(1,1,2,1,1)

(2,3,1,0,0)

(矩阵(X)的列数等于所有实例中唯一值的数量;考虑到所有数字都在2到6之间,这意味着我们总共有5个不同的值)


我认为等级在这种情况下是不正确的

可能有一种更有效/更短的方法来计算所有实例的并集的唯一值,但除此之外,这与@whuber在评论中的建议非常相似:

测试用例:

instances <- list(c(2,3,4,4,5,6),c(2,3,3,3,4,2))

您能否更精确地描述初始向量$(1,2,3,3,4,5)$和目标向量$(1,2,3,3,4,5)$之间的一般关系?它们看起来非常相似~因为(2,3,3,4,2)有2个2,为什么结果不是(2,3,1,0,0)?听起来你只是把数据的排序值制成表格。无论您在做什么,您的问题似乎与标题无关,标题询问
rank
R
中是如何工作的。除了输出末尾的额外零之外,base
R
中的解决方案是应用
table
函数。是的,你是对的,我更改了数字以使其更清晰。假设数字是从2到6。(2,3,4,4,5,6)应该变成(1,2,3,3,4,5)。和(2,3,3,4,2)应该变成(2,3,1,0,0)。我还更改了标题@G5W我修改了它。让我重复一遍:您是在制表,而不是排名,正确的
R
解决方案是
table
函数。非常感谢。第二部分的代码很好,但是你对排名有什么建议吗?我的矩阵实际上是由不同长度的序列分割出来的矩阵。您的代码在10分钟后仍在运行,尚未完成。我只有12000个实例(序列)和420个唯一值。我(和评论者一起)不明白你所说的排名是什么意思。我的代码解决了您给出的示例问题。如果你需要其他东西,你需要尝试构建一个更接近你需要的可复制的例子。(如果您已经知道唯一值,可以将它们直接放入
levels
参数中)
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