“订单”的输出对我来说没有意义

时间:2014-01-09 22:22:57

标签: r

无论出于何种原因,我无法理解函数“订单”实际上在做什么。在下面的代码中,我展示了一些数据,什么顺序返回,然后我天真地想到的顺序应该返回但不会。对我而言,似乎是专栏3,4,5,6& 7是不正确但我怀疑这只是订单的文件没有通过我的愚蠢的头。

x1 = c(1,1,3:1,1:4,3)
Ordered = order(x1)
MarkThinks = c(1,2,7,5,3,4,6,8,10,9)
Res1 = rbind(x1, Ordered, MarkThinks)

Res1

当我在这里跑步时,我得到:

> Res1
           [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x1            1    1    3    2    1    1    2    3    4     3
Ordered       1    2    5    6    4    7    3    8   10     9
MarkThinks    1    2    7    5    3    4    6    8   10     9

在我看来,排序意味着第1行中的4个1将在他们的位置产生1,2,3,4,然后是2个2产生5,6,3个3的7,8,9和1 4生成10.在我的应用程序中,关系如何被打破并不重要因此我只是从左到右,但任何关系的顺序都是可以接受的。

假设订单工作正常而不是我需要的东西(即 - 我还没想到的一些选项)我怎么能得到我在第3行寻找的东西?

2 个答案:

答案 0 :(得分:5)

您的Ordered变量名称错误。 order返回的是有序向量的索引 - 即以排序顺序获取元素所需的子集索引。因此,以下内容返回有序元素:

> ordered_indices = order(x1)
> ordered = x1[ordered_indices]

MarkThinks输出可以使用rank来实现,正如名称所示,字面上会返回每个元素的 rank (但是当元素绑定时会做几个不同的事情) :

> ranked = rank(x1, ties.method = 'first')
> rbind(x1, ordered_indices, ordered, ranked)
                [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x1                 1    1    3    2    1    1    2    3    4     3
ordered_indices    1    2    5    6    4    7    3    8   10     9
ordered            1    1    1    1    2    2    3    3    3     4
ranked             1    2    7    5    3    4    6    8   10     9

答案 1 :(得分:2)

基本上order(x)会返回排序x

的顺序
x1 = c(1,1,3:1,1:4,3)
Ordered = order(x1)
x1[Ordered]

希望有所帮助