【发布时间】:2015-11-17 12:19:10
【问题描述】:
假设我有几个向量 - 也许它们存储在一个列表中,但如果有更好的数据结构也可以:
ll <- list(c(1,3,2),
c(1,2),
c(2,1),
c(1,3,1))
我想对它们进行排序,使用第一个数字,然后是第二个数字来解决平局,然后是第三个数字来解决剩余的平局,等等:
c(1,2)
c(1,3,1)
c(1,3,2)
c(2,1)
是否有任何内置函数可以让我这样做,还是我需要推出自己的解决方案?
(对于那些了解 Python 的人来说,我追求的是模仿 Python 中排序行为的东西)
【问题讨论】:
-
这就是你要找的"Lexicographical order"。
-
请注意(我应该在问题中指定这一点):每个向量的元素可能不止一个数字,例如一个向量可以是 c(1,10,1)
-
为了使您的排序有意义,所有向量应该具有相同的长度(即,用
NA值填充)。在这种情况下,matrix或data.frame将是一个合理的数据结构。我的回答假设您不想更改向量。 -
@Roland:为什么用可变向量长度进行排序没有意义?百科全书的词序不也是一样的吗?
-
我不确定我是否同意排序只有在所有向量长度相同时才有意义的想法。我正在玩一个扑克程序,将这里的 Python 代码:udacity.com/wiki/cs212/unit-1 翻译成 R,看看它是如何工作的。手牌的顺序是在该链接的程序中使用不等长的向量计算出来的(参见“扑克问题的完整代码”),我认为这是对不等长向量进行排序的一个有意义的用例。话虽如此,我同意要在 R 中解决这个问题,似乎最容易使所有向量的长度相同