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,1
或2,2,1
或3,2,1
,具体取决于订单如何处理相同的值?无论如何......第三个值应该是order = 1.
我的理解是正确的,还是我错过了什么?
答案 0 :(得分:2)
根据文档,
order返回一个排列,它将第一个参数重新排列为升序或降序,通过进一步的参数打破联系。
即。 order()
会返回一组索引,以使x[order(x)]
按递增顺序排列,或x[order(x,decreasing = TRUE)]
按降序排列。
如果x
中的两个连续值相同,那么order
返回的值中索引的顺序并不重要,而且只取决于最有效的值并且涉及的最少量在内部C代码中交换值。