이 절에서는 데이터를 정력하는 함수인 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 |