2012-10-17 65 views
0

使用示例可能更容易解释我自己。 比方说,我有一个列表S:对包含不同类型的列表或对象进行排序R

小号< - 列表(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++世界中,我需要做的唯一事情就是为我的对象定义运算符<,但是我非常新的R,我正在耗尽想法。

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

在我看来,这似乎是一个共同的问题,它必须是一个更好的方法。任何人都可以将我指向正确的方向吗?

感谢您的帮助。

回答

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 

请注意,我改变你的列表中的数据帧。由于数据框本身就是一个列表(所有元素的长度相同),这对你的情况应该不成问题。

+1

如果有许多列,并且它们与传递给'order'的顺序相同,您也可以使用'do.call(order,s)'。 –

+0

谢谢,这是完美的。 –

相关问题