使用示例可能更容易解释自己。 假设我有一个列表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”产生最低等级),将结果存储在另一个向量中并对其进行排序。然而,解决方案并不是很好,因为找到一个好的排名功能可能很棘手,并且不容易概括。
在我看来,这是一个常见的问题,它必须是一种更好的方式。谁能指出我正确的方向?
感谢您的帮助。
答案 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
请注意,我将您的列表转换为数据框。由于数据框本身就是一个列表(所有元素长度相同),因此在您的情况下这不应该是一个问题。