본문 바로가기
R

[R] 정렬, 순위 함수 sort(), rank(), order() 비교

by JKyun 2017. 4. 5.

안녕하세요. 우주신입니다.


이번 포스팅에서는 정렬, 순위 함수 sort(), rank(), order()를 비교해보겠습니다.


데이터를 처리할 때 활용도가 높은 함수들인데 가끔 혼동될 때가 있죠... 이번 기회에 싹 정리해보겠습니다.



우선, 샘플 데이터 20개를 만든 후, 설명을 위해 마지막에 NA 값을 추가했습니다.


1. sort()


예제를 보면서 이해하는 것이 수월하니 예제부터 바로 보겠습니다.

sort(a) 출력 결과, 절대값을 오름차순으로 정렬했습니다.

내림차순으로 정렬하고 싶을 때는 decreasing = T 옵션을 추가하면 됩니다.


sort()함수는 자동으로 NA 값을 제외 시킨 후 정렬을 하기 때문에, NA 값을 표시하고 싶다면 na.last 옵션을 추가하면 됩니다.

na.last = TRUE인 경우, NA 값을 끝에 출력하고, FALSE일 경우에는 앞에 출력하는 것을 확인할 수 있습니다.



2. rank()


이번에는 rank() 함수인데 출력 결과를 보면, 순위가 매겨졌습니다. 

여기서 중요한 것은 순위대로 정렬한 것이 아니라 순위의 색인을 나타낸 것입니다.

47은 18번째 순위라는 뜻이며 NA값이 마지막 순위인 21로  매겨진 것을 볼 수 있습니다.

거꾸로 큰 것부터 순위를 매기려면 rank(-a)와 같이 '-'를 앞에 붙여주면 됩니다. 


rank()함수는 자동으로 NA 값을 마지막 번째 순위로 매기는데, na.last 옵션을 사용하여 NA값을 조정할 수 있습니다.

FALSE일 경우 NA가 1번으로 순위가 매겨진 것을 알 수 있습니다. 

"keep"일 경우 NA를 그대로 나타내고,

NA일 경우 NA 값을 제거합니다.



3. order()


order() 함수 출력 결과를 보면 몇초 고민했을거에요...

출력결과를 보면, 'a의 4번째 자리에 있는 숫자 1이 첫번째 자리로 와야하고, 17번째 자리에 있는 숫자 2가 두번째 자리로 와야한다'라는 뜻 입니다.


na.last 옵션의 경우 TRUE, FALSE, "NA"가 있으며, 위 예제에서는 na.last = "NA" 를 통해 NA 값 자체를 제거했습니다.

두번쨰 출력 결과를 보면 오름차순으로 정렬된 것을 볼 수 있는데,

정렬 색인을 인덱싱에 넣음으로써 sort(a) 결과와 같게 나온 것을 확인할 수 있습니다.





수고하셨습니다~

댓글