더북(TheBook)

order()

order( )는 주어진 인자를 정렬하기 위한 각 요소의 색인을 반환한다. 함수 프로토타입은 ‘4.5.2 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
39          4.4          3.0         1.3         0.2  setosa
43          4.4          3.2         1.3         0.2  setosa
42          4.5          2.3         1.3         0.3  setosa
4           4.6          3.1         1.5         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.1         0.1  setosa
39          4.4         3.0          1.3         0.2  setosa
43          4.4         3.2          1.3         0.2  setosa
9           4.4         2.9          1.4         0.2  setosa
42          4.5         2.3          1.3         0.3  setosa
23          4.6         3.6          1.0         0.2  setosa
...

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

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.