본문 바로가기
R

[R.아르] 원하는 순서로 데이터 정렬하기 order()

by LightBlogger 2016. 9. 26.

2016/09/23 - [R] - [R. 아르] 리스트에 없는 항목만 추출하기 (차집합, setdiff()) 에서


잠시 sort() 함수가 나온 적이 있다.


예를 들어 다음과 같은 z를 순서대로 정렬해야 한다면 



sort()를 사용하면 간단하다.



만일 내림차순으로 정렬하고 싶다면 [decreasing=] 옵션을 사용하자.



하지만 다음과 같은 데이터프레임은 sort()로 정렬하기가 난감하다.



y$var 를 sort()로 정렬할 수는 있겠지만, y전체가 정렬되지는 않는다.


이럴 때는 order()를 사용한다.


order()는 각 요소의 상대적인 순서를 반환한다.


order(y$var)를 보자.



(1)100 - (6)150 - (2)250 - (9)260 ... 과 같이 값을 순서대로 정렬한 후, 그 값이 원 데이터의 몇 번째에 존재하는지를 알려준다.


즉 y를 var에 따라 정렬하고 싶다면 1행, 6행, 2행, 9행... 의 순서로 배열하면 되는 것이다.


그러므로 y <- y[c(1,6,2,9,3,8,5,7,4),] 로 적으면 되겠고,


다시말해 y <- y[c(order(y$var)),] 로 적으면 된다.



행 번호가 거슬린다면 초기화해 주자.



order()는 알파벳이나 한글에 대하여도 잘 동작한다.



알파벳인 cat열에 따라 오름차순 정렬되었다. 


cat에 따라 정렬한 후, var에 따라 정렬하려면 어떻게 할까?


두 개 이상의 인자에 따른 정렬은 다음과 같이 order() 안에 순서대로 적어 주면 된다.



cat은 오름차순 정렬한 뒤 var는 내림차순 정렬하려면?


[decreasing=T]를 사용할 경우 cat도 내림차순 정렬될 것이므로 까다롭다.


이럴 땐 숫자에 (-)를 곱해 더 큰 수가 더 작은 수가 되도록 만들어 주면 된다.



(-) 를 붙이면 반대가 되는 것을 볼 수 있다.


이를 이용하여 



위와 같이 하면 cat은 오름차순, var는 내림차순으로 정렬할 수 있다.



문자를 내림차순 정렬하려면 어떻게 해야 할까?


예를 들어 다음과 같은 x에서



cat2열은 문자이므로 (-)를 곱해도 결과가 나오지 않는다.


이럴 땐 문자의 가치를 일단 숫자로 바꾸어 주는 것이 필요하다.


rank()를 사용하면 각 문자의 가치를 일련의 점수로 바꾸어 출력해 준다.



rank()가 "나"에는 5점, "다"에는 8점 등을 할당하였다. 


이제 이 점수에 (-)를 곱해서 다음과 같이 표현하면 된다.



반응형

댓글