0

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

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

对于所有子向量,s 始终具有相同数量的对象。不允许使用 NA 值。向量包含不同的类型。

我想要实现的是:

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

基本上,要根据第一个向量(按升序)对列表进行排序,然后(在平局的情况下)使用词汇顺序查看第二个向量。在 C++ 世界中,我唯一需要做的就是为我的对象定义 operator<,但是我对 R 很陌生,而且我的想法已经不多了。

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

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

谢谢你的帮助。

4

1 回答 1

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

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

于 2012-10-17T09:50:41.143 回答