如何在R中排序序列向量

时间:2018-04-15 13:16:49

标签: r

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

我不明白结果是怎么出来的。 在这种情况下有多个向量时,顺序函数如何工作? 你能解释一下结果是怎么出来的吗?

2 个答案:

答案 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行占据第二个等等。