2012-10-17 2 views
0

예제를 사용하여 쉽게 설명 할 수 있습니다. , "C", "D"목록 (C (5,3,4,3,6), C ("A", "B"-다른 유형을 포함하는 목록 또는 개체 정렬 R

의 < : 의 내가 목록의 있다고 가정 해 봅시다 , "E"))

s는 모든 하위 벡터에 대해 항상 같은 수의 개체를가집니다. NA 값은 허용되지 않습니다. 벡터에는 여러 유형이 있습니다.

내가 달성하고자하는 것은 :

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

기본적으로 (오름차순) 최초의 벡터를 기반으로 목록을 정렬하고 (넥타이 경우) lexicological를 사용하여 두 번째 벡터에보고 주문. C++ 세계에서 유일해야 할 일은 제 오브젝트에 대해 연산자 <을 정의하는 것입니다. 그러나 저는 R의 새로운 것이므로 아이디어가 부족합니다.

내가 찾은 최고의 전략은 요소를 반복하고 각 커플에 대한 순위 값 (double)을 계산하는 것입니다 (예 : 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

'do.call (order, s)'는 많은 열이 있고'order'에 전달할 때와 같은 순서로 사용할 수 있습니다. –

+0

감사합니다. 이것은 완벽합니다. –

관련 문제