어떤 벡터가 있을 때 sort() 함수를 적용하면 그 원소들을 다음과 같이 오름차순으로 정리하여 출력한다. 내림차순으로 정동하고 싶으면 decreasing=T를 설정하면 된다.
> x = c(1,5,3,2,4)order() 함수는 벡터의 원소를 이 인덱스 번호순으로 놓으면 값이 정렬된다는 것을 의미한다. Character 타입의 벡터를 사용하여 설명하는 것이 이해하기 쉬울 것이다. 이를 이해한다면 아래에서 보인 마지막 명령이 무엇을 뜻하는지도 납득할 수 있다.
> sort(x)
[1] 1 2 3 4 5
> y = c("a","c","e","b","c")order(y)를 사용하여 알 수 있는 것은 벡터 y의 원소를 값에 따라서 순서대로 나열하려면 첫번째, 네번째, 두번째, 다섯번째, 그리고 세번째 원소의 순서대로 놓으면 된다는 것이다.
> sort(y)
[1] "a" "b" "c" "c" "e"
> order(y)
[1] 1 4 2 5 3
> y[order(y)]
[1] "a" "b" "c" "c" "e"
order() 함수를 이용하면 행이나 열을 name에 따라서 정렬하는 것도 가능하다. 연습용 4x3 매트릭스를 만들고 colnames()로 각 열에 이름을 붙인 뒤 이것에 따라서 컬럼을 정렬하는 연습을 해 본다. 컬럼의 위치만 바뀔 뿐 각 컬럼 내의 값은 원래의 행 번호를 그대로 지킨다.
> z = matrix(c(4:1,12:9,5:8),4,3)
> z
[,1] [,2] [,3]
[1,] 4 12 5
[2,] 3 11 6
[3,] 2 10 7
[4,] 1 9 8
> colnames(z) = c("A","C","B")
> z
A C B
[1,] 4 12 5
[2,] 3 11 6
[3,] 2 10 7
[4,] 1 9 8
> z[, order(colnames(z))]
A B C
[1,] 4 5 12
[2,] 3 6 11
[3,] 2 7 10
[4,] 1 8 9
apply()와 join() 계열의 함수를 잘 써야 하는데... 아직도 멀었다!
댓글 없음:
댓글 쓰기