ii <- order(x <- c(1,1,3:1,1:4,3), y <- c(9,9:1), z <- c(2,1:9))
#[1] 6 5 2 1 7 4 10 8 3 9
我不明白结果是怎么出来的。 在这种情况下有多个向量时,顺序函数如何工作? 你能解释一下结果是怎么出来的吗?
答案 0 :(得分:1)
这是第一个载体的顺序
x[ii]
# [1] 1 1 1 1 2 2 3 3 3 4
后续的向量仅用于打破关系:?order
告诉我们,
“在第一个向量中的关系的情况下,第二个向量中的值用于打破关系。如果值仍然绑定,则后面的参数中的值用于打破平局”任何未解析的关系将保留在其原始关系中排序
把它想象成一个电话目录。首先,它按姓氏命令。然后,如果某些人共享相同的姓氏,则按名字命令他们。如果不止一个,比如约翰史密斯,它会按照中间的首字母排序(John A. Smith跟随John B. Smith)等等......
请注意,顺序不会对矢量进行排序。相反,它返回一个数字索引,显示原始向量中有序项的位置。
答案 1 :(得分:0)
我能让你理解这一点的最简单方法:order
函数将输入向量排列为行:
cbind(x,y,z)[ii,]
x y z
[1,] 1 5 5
[2,] 1 6 4
[3,] 1 9 1
[4,] 1 9 2
[5,] 2 4 6
[6,] 2 7 3
[7,] 3 1 9
[8,] 3 3 7
[9,] 3 8 2
[10,] 4 2 8
如您所见,给出的结果是:
ii [1] 6 5 2 1 7 4 10 8 3 9
意思是,第一个位置应该被第六行占据,第二个位置被第五行占据,第三个位置被第二行占用..一直到最后一个位置应该被第9行占用...好的
cbind(x,y,z)
x y z
[1,] 1 9 2
[2,] 1 9 1
[3,] 3 8 2
[4,] 2 7 3
[5,] 1 6 4
[6,] 1 5 5
[7,] 2 4 6
[8,] 3 3 7
[9,] 4 2 8
[10,] 3 1 9
现在比较这个给定的矩阵,以及上面得到的结果。看看这里的第六行是1,5,5
但是看看上面的输出,它是第一行..看看第9行..这里它成为获得结果中的第十行:因此order函数告诉你哪些行应该占据某些位置..即第六行应该占据第一个位置,fith行占据第二个等等。