在R中对包含不同类型的列表或对象进行排序

时间:2012-10-17 09:45:53

标签: r

使用示例可能更容易解释自己。 假设我有一个列表s:

  

s< - list(c(5,3,4,3,6),c(“A”,“B”,“C”,“D”,“E”))

对于所有子向量,

始终具有相同数量的对象。不允许NA值。向量包含不同的类型。

我想要实现的目标是:

rank  v1   v2
1     3    "B"
2     3    "D"
3     4    "C"
4     5    "A"
5     6    "E"

基本上,要根据第一个向量(按升序排序)对列表进行排序,然后(在绑定的情况下)使用词典顺序查看第二个向量。在C ++世界中,我唯一需要做的就是定义运算符<对于我的对象,不过我是R的新手,而且我的想法很少。

我发现的最佳策略是循环元素并计算每对夫妇的等级值(双倍)(例如,3“B”将产生最高等级,6“E”产生最低等级),将结果存储在另一个向量中并对其进行排序。然而,解决方案并不是很好,因为找到一个好的排名功能可能很棘手,并且不容易概括。

在我看来,这是一个常见的问题,它必须是一种更好的方式。谁能指出我正确的方向?

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

使用order()

s <- data.frame(v1=c(5,3,4,3,6), v2=c("A","B","C","D","E"))
s[order(s$v1, s$v2), ]
  v1 v2
2  3  B
4  3  D
3  4  C
1  5  A
5  6  E

请注意,我将您的列表转换为数据框。由于数据框本身就是一个列表(所有元素长度相同),因此在您的情况下这不应该是一个问题。