【问题标题】:R ordering bug?R订购错误?
【发布时间】:2016-05-05 01:42:00
【问题描述】:

R Fiddle

vals<-c(10.3,10.3,10.2,16.4,18.8,19.7,15.6,18.2,22.6,19.9,24.2,21.0,21.4,21.3,19.1,22.2,33.8,27.4,25.7,24.9,34.5,31.7,36.3,38.3,42.6,55.4,55.7,58.3,51.5,51.0,77.0)

# Standard Order    
# the second and third values should be reversed

order(vals)

# ------------------------------------------------------------
# [1]  3  1  2  7  4  8  5 15  6 10 12 14 13 16  9 11 20 19 18 22 17 21 23 24 25
# [26] 30 29 26 27 28 31
# ------------------------------------------------------------
    

# Reverse Decreasing
# should be the same as the original, but it isn't (it's correct)
rev(order(vals, decreasing=T))

# ------------------------------------------------------------
# [1]  3  2  1  7  4  8  5 15  6 10 12 14 13 16  9 11 20 19 18 22 17 21 23 24 25
# [26] 30 29 26 27 28 31
# ------------------------------------------------------------

我需要一些帮助来理解 R 中发生的事情。我认为在输出顺序时存在错误,并且它们的不同之处。注意两个输出的第二个和第三个值。订单不应该是3,3,12,2,13,2,1,这取决于订单如何处理相同的值?无论如何.. 第三个值应该有 order=1。

我的理解是否正确,还是我遗漏了什么?

【问题讨论】:

  • 您确定没有将orderrank 混淆吗?
  • 正如 joran 所说,order(vals) 输出的初始 3 表示向量中的第 3 项是最小值。这并不意味着向量中的第一项具有第三低的值。所以1 22 1 是可以互换的,因为这些位置的值是相等的。
  • 我之所以考虑它是因为我阅读了另一个类似的问题,并且我还运行了其他功能(排名、排序等),但后来我无法解释 (order) 的作用,尤其是在帮助的情况下文档。更重要的是,我无法解释为什么 decreasing=true 的反转会与标准 decreasing=false 不同

标签: r


【解决方案1】:

根据文档,

order 返回一个排列,它将其第一个参数重新排列为升序或降序,通过进一步的参数打破平局。

order() 返回一组索引,使得 x[order(x)] 以升序排列,或者 x[order(x,decreasing = TRUE)] 以降序排列。

如果x 中的两个连续值相同,则它们在order 返回的值中的索引顺序无关紧要,将仅取决于最有效且涉及最少交换值的顺序内部 C 代码。

【讨论】:

  • 我今天一定很慢 - 有些东西没有点击。 vals[ order(vals) ] 确实像我预期的那样订购,它在第一位显示10.2;但是,order(vals) 显示该索引的顺序为3。我了解以相同价值交换订单,但我仍在努力了解正在发生的事情。是否有动画或更直观的表示正在发生的事情 - 我认为这可能会帮助我,甚至是今天看起来很笨的同事:) - thx
  • @vol7ron 您的想法是order 返回的数字与vals 中的值按照它们在vals 中出现的顺序相对应。 order 返回的3 仅仅意味着vals 中的第三个值应该在前,而不是vals 的第一个元素是最小的。
  • @vol7ron ...另一种看待它的方式是x &lt;- c('c','b','a'),您将如何填写表达式x[c(...)] 以将它们按正确的顺序排列?
  • 确认!当您第一次看到图像时,这就像魔眼谜题。谢谢你,乔兰。订单号,是应该出现的值的索引。对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
相关资源
最近更新 更多