R订购错误?

时间:2016-05-04 17:28:29

标签: r

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.

我的理解是正确的,还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

根据文档,

  

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

即。 order()会返回一组索引,以使x[order(x)]按递增顺序排列,或x[order(x,decreasing = TRUE)]按降序排列。

如果x中的两个连续值相同,那么order返回的值中索引的顺序并不重要,而且只取决于最有效的值并且涉及的最少量在内部C代码中交换值。