더북(TheBook)

orderBy()

orderBy( )는 데이터 프레임을 정렬하는 목적으로 사용한다. 다른 함수들과 다르게 데이터를 그룹으로 묶는 기능은 없다. orderBy( ) 역시 base 패키지의 order( ) 함수에 대응한다. 이 두 가지 함수를 표 4-19에 정리했다.

표 4-19 데이터 정렬 함수

base::order : 데이터를 정렬하기 위한 순서를 반환한다.

order(
  ...,  # 정렬할 데이터
  # na.last NA 값을 정렬한 결과의 어디에 둘 것인지를 제어한다. 기본값인 na.last=TRUE
  # NA 값을 정렬한 결과의 마지막에 둔다. na.last=FALSE는 정렬한 값의 처음에 둔다.
  # na.last=NA NA 값을 정렬 결과에서 제외한다.
  na.last=TRUE,
  decreasing=FALSE  # 내림차순 여부
)

반환 값은 원 데이터에 지정하면 정렬된 결과가 나오도록 하는 색인이다.

doBy::orderBy : 포뮬러에 따라 데이터를 정렬한다.

doBy::orderBy(
  formula,  # 정렬할 기준을 지정한 포뮬러
            # ~의 좌측은 무시하며, ~ 우측에 나열한 이름에 따라 데이터가 정렬된다.
  data,     # 정렬할 데이터
)

반환 값은 order( )와 동일하다.

order( ) 함수는 주어진 값을 정렬하기 위한 색인을 순서대로 반환하는데, 이를 사용해 정렬된 결과를 얻을 수 있다. 다음 예는 아이리스 데이터를 Sepal.Length에 따라 정렬했을 때 61행이 가장 처음, 63행이 두 번째, 69행이 세 번째 등에 해당함을 보여준다.

> order(iris$Sepal.Width)
[1] 61 63 69 120 42 ...
...

이 순서를 데이터 프레임의 각 행에 대한 색인으로 사용하면 정렬된 결과를 얻을 수 있다.

> iris[order(iris$Sepal.Width),]
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
61          5.0         2.0          3.5         1.0 versicolor
63          6.0         2.2          4.0         1.0 versicolor
...
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.