본문 바로가기

R/R을 이용한 데이터 처리&분석 실무

데이터 정렬

반응형

이 절에서는 데이터를 정력하는 함수인 sort()와 order()를 설명한다. sort()는 주어진 데이터를 직접 정렬해주는 함수며, order()는 데이터를 정렬했을 때의 순서를 반환한다.

 

sort()

sort()는 주어진 벡터를 정렬한 결과를 반환한다.

 

-sort : 벡터를 정렬한다.

sort(

   x,    #정렬할 벡터

   decreasing=FALSE,    # 내림차순 여부

   # na.last는 NA 값을 정렬한 결과의 어디에 둘 것인지를 제어한다. n.last=TRUE는 NA값을

   #정렬한 결과의 마지막에 두고, na.last=FALSE는 정렬한 값의 처음에 둔다.

   #기본값인 na.last=NA는 NA값을 정렬 결과에서 제외한다.

   na.last=NA

)

 

다음ㅁ은 임의의 값이 저장된 벡터를 각각 오름차순과 내림차순으로 정렬한 예다.

>x<-c(20,11,33,50,47)
>sort(x)
[1] 11 20 33 47 50

>srot(x,decreasing=TRUE)
[1]50 47 33 20 11

>x
[1]20 11 33 50 47

 

위 코드에서 알 수 있듯이, sort()는 값을 정렬한 결과를 반환할 뿐이지 인자로 받은 벡터 자체를 변경하지는 않는다. 이는 "값에 의한 전달"절을 보면, R 함수는 대부분 인자를 값으로 전달하기 때문이라는 것을 알 수 있다.

 

order()

order()는 주어진 인자를 정렬하기 위한 각 요소의 색인을 반환한다. 함수 프로토타입은 "orderBy()"에서 확인하길 바란다.

 

다음은 임의의 값을 저장한 벡터 x를 정렬하기 위한 순서를 반환한 예다. order(x)는 x[order(x)]가 정렬되어 있게 하기 위한 색인이다.

>x<-c(20,11,33,50,47)
>order(x)
[1] 2 1 3 5 4

 

내림차순으로 정렬한 결과를 얻고 싶다면 decreasing=TRUE를 지정한다.

>x<-c(20,11,33,50,47)
>order(x, decreasing=TRUE)
[1] 4 5 3 1 2

 

order()가 정렬된 순서를 반환한다는 점을 이용해 데이터 프레임을 정렳할 수 있다. 다음은 아이리스 데이터를 Sepal.Length에 따라 정렬한 예다.

>iris[order(iris$Sepal.Length),]
      Sepal.Length    Sepal.Width    Petal.Length    Petal.Width    Species
14         4.3               3.0                1.1                0.1           setosa
9           4.4               2.9                1.4                0.2           setosa
...

 

결과를 보면 9행, 39행, 43행의 Sepal.Length가 모두 같다. 이와 같이 Sepal.Length가 같을 경우 Petal.Length의 순서에 따라 정렬하려면 다음과 같이 Petal.Length를 추가적인 인자로 order()에 넘기면 된다.

>iris[order(iris$Sepal.Length,iris$Petal.Length),]
      Sepal.Length    Sepal.Width    Petal.Length    Petal.Width    Species
14          4.3             3.0                1.3                 0.1          setosa
39          4.4             3.0                1.3                 0.2          setosa
...

 

보다시피 9행, 39행, 43행이었던 순서가 Petal.Length의 크기에 따라 39행, 43행, 9행으로 바뀌었다.

 

R을 이용한 데이터 처리&분석 실무 中

반응형

'R > R을 이용한 데이터 처리&분석 실무' 카테고리의 다른 글

코드 수행 시간 측정  (0) 2020.02.03
데이터 구조의 변형과 요약  (0) 2020.02.03
데이터 분리 및 병합  (0) 2020.02.03
apply 계열 함수 - 2  (0) 2020.02.02
apply 계열 함수 - 1  (0) 2020.02.01