'정렬'에 해당되는 글 2건

  1. 2015.08.27 R 데이터셋 정렬하기~
  2. 2015.08.07 자바 객체로 구성된 리스트 정렬하기

R 데이터셋 정렬하기~

|



지난번 글에서 R 데이터셋의 명령어들.. head, str, summary, stem, fivenum, hist, boxplot 을 살펴봤다. 

이번에는 데이터셋을 정렬하는 명령어를 알아본다. 


실전에서도 데이터셋 정렬은 많이 사용하기 때문에 잘 알아두면 많은 도움이 될 것이다. 

샘플 데이터 셋은 역시 R에 내장되어 있는 mtcars (1974년 Motor Trend US Magazine에서 추출한 73, 74년식 자동차 32개 데이터)이다. 


R 데이터 정렬

R에서 데이터 정렬하는 명령어는 order이다. 

먼저 mtcars를 읽어온 후, 

> dtat(mtcars)


mtcars 데이터의 mpg(mile per gallon)을 기준으로 order를 실행해 보자. 


order의 결과값을 실제 mtcars$mpg의 값과 비교해 보면 그 의미를 명확하게 알 수 있다. 


order 함수는 말 그대로 해당 열의 순서, 즉 인덱스만을 제공하는 명령어이다. 

그래서 order의 결과값은 각 열의 데이터의 순서를 나타낸다. 

즉, 첫번째 값인 21.0이 mpg 전체서 15번째이고, 두번째 값인 21.0이 그 다음인 16번째 라는 것을 나타낸다. 


그럼. 순서를 나타내는 order를 가지고 어떻게 데이터를 정렬할 수 있을까? 

order를 필터로 mtcars를 재정렬해서 다음과 같이 저장하면 된다. 


head 함수로 결과를 살펴보면 mpg를 기반으로 오름차순으로 잘 정리된 것을 확인할 수 있다. 

mtcars[order(mtcars$mpg,] 형태를 잘 기억해 두기 바란다. 


이제 원하는 다른 열의 데이터를 가지고 정렬하는데 어려움이 없을 것이다. 

만약 마력(hp)를 기준으로 정렬한다면 다음과 같이 처리한다. 


그렇다면 오름차순이 아닌 내림차순으로 정렬하는 것은 어떻게 할까? 

order 함수 내에 -를 붙이면 해결된다. 


마지막으로 두개의 열을 기준으로 mpg는 오름차순, hp는 내림차순으로 하려면 다음과 같이 한다. 


마지막으로 각 행의 이름, 여기에서는 자동차 모델명으로 정렬하는 것을 알아보자. 

행의 이름을 가져오는 함수는 rownames()이며, 이걸 기준으로 order 함수를 적용하면 된다. 


미니의 R 주요 강좌...

데이터 통계 분석을 위한 R 설치와 활용

R 실행을 위한 기본적인 내용들~

R 데이터 구조에 대한 정리

R 패키지 설치하기

R 데이터셋 처리 함수들에 대한 간단한 정리~

R 데이터셋 정렬하기~

R 데이터셋의 일부 데이터 가져오기

R의 lapply, sapply, vapply를 이해하자~

R의 apply, tapply의 활용법을 알아보자~

R의 split 활용

R의 함수 작성 및 활용~

R 시뮬레이션 - 랜덤 변수 샘플링

R 함수에서 캐시 활용하기~

R 디버깅 툴 활용하기~





Trackback 0 And Comment 0

자바 객체로 구성된 리스트 정렬하기

|



자바에서 리스트의 정렬은 Collections.sort() 메소드를 이용해서 쉽게 수행할 수 있다. 

리스트의 값이 기본 타입일 경우에는 바로 Collection.sort(list)를 적용하면 된다. 


만약 리스트의 값의 자체적으로 만든 객체(Object)일 경우, 어떻게 처리해야 할까? 

우선 Comparator 인터페이스를 구현해서 내부에 compare 메소드로 정렬할 방식을 정한다. 

그리고 Collection.sort를 호출할 때 Comparator 인터페이스를 구현한 클래스의 객체를 전달하면 된다. 


예제를 통해서 살펴보도록 하자~

먼저 name과 volume의 멤버 변수를 가진 MiniVo 객체를 다음과 같이 만든다. 


volume을 기준으로 정렬을 해 볼 예정이며, 좀 더 다양한 경우를 고려해서 실제값은 숫자형이지만 String으로 선언했다. 


이어서 정렬을 위한 리스트를 다음과 같이 구성한다. 

ArrayList를 활용해서 3개의 데이터를 입력하고 순서대로 출력하는 부분까지 포함했다. 


그리고 Comparator 인터페이스를 구현한 클래스의 객체를 생성하고, Collections.sort를 통해 정렬한 뒤 결과 값을 확인하는 소스다.



마지막으로 MiniComparator 클래스를 구현한 부분을 살펴보자. 

여기서 중요한 부분은 compare 메소드를 처리하는 부분이다. 


compare 메소드는 MiniVo 객체를 두개 받아서 voulme 값을 Double 형으로 변환하고 

두 수를 비교해서 결과값을 0, 1, -1로 리턴하는 함수이다. 

이 예제에서는 내림차순으로 정렬했다. 오름차순이 필요하면 1과 -1의 리턴값을 바꾸면 될 것이다. 


실행 결과를 살펴보면 다음과 같이 내림차순으로 객체들이 정렬된 것을 확인할 수 있다. 


실행하기 위한 전체 소스는 다음과 같다. 






Trackback 0 And Comment 0
prev | 1 | next