【问题标题】:The output of 'order' not making sense to me [duplicate]“订单”的输出对我没有意义[重复]
【发布时间】:2014-01-09 22:22:57
【问题描述】:

无论出于何种原因,我都无法理解“订单”函数实际上在做什么。在下面的代码中,我展示了一些数据,返回了什么订单,然后我天真地认为订单应该返回但没有返回。对我来说,第 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 行中的四个 1 将在其位置生成 1、2、3、4,然后是两个 2 生成 5、6,三个 3 生成 7、8、9 和一个4 生成 10。在我的应用程序中,如何打破关系并不重要,所以我只是从左到右,但任何关系的顺序都是可以接受的。

假设 order 工作正常,而不是我在这里需要的(即 - 一些我还没有弄清楚的选项)我将如何在第 3 行得到我正在寻找的东西?

【问题讨论】:

标签: r


【解决方案1】:

您的 Ordered 变量命名错误。 order 返回的是有序向量的 indices - 即按排序顺序获取元素所需的子集索引。所以下面返回有序元素:

> 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

【讨论】:

  • 他们可以通过rank(x1, ties="first")获得他们想要的结果。
  • 所以 'ordered' 返回索引,x1[order(x1)] 按顺序返回列表,这很有价值,但不完全是我需要的。 Joshua 对“等级”的使用非常适合我的需要。感谢所有回答的人。
【解决方案2】:

基本上order(x)返回排序的顺序x

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2018-08-07
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多