Gae Ko's Blog

[R] 정렬하기 본문

통계/R

[R] 정렬하기

Gae Ko 2018. 2. 16. 02:05

▶ 특정 기준에 따라서 정렬하는 방법


SAS에서는 데이터셋을 특정 기준으로 merge()하기 전에 정렬 sort 를 실행한다.

R에서는 merge할 때 사전에 sort해 줄 필요 없음. (merge는 데이터셋을 병합해주는 함수)


R에서 데이터 정렬을 위한 대표적인 함수로 sort() 와 order() 함수가 있다.

sort()는 정렬된 값을 순서대로 보여주는 반면에, order()는 데이터 크기의 인덱스 값을 제공한다.


(1) 숫자 자체 정렬 sort()

sort()의 디폴트 정렬순은 오름차순.

내림차순으로 하려면 decreasing = TRUE 라는 옵션을 추가한다.

데이터프레임에서는 사용할 수 없음. 그래서 백터 정렬시에 사용.


(2) 정렬 인덱스 값 order()

R에서의 인덱스는 1부터 시작한다. 

order()함수의 결과는 작은 순서대로 인덱스를 매겨서 그 값을 보여준다.


> v1 <- c(40, 30, 50, 50, 90, 40, 50)

> v1

[1] 40 30 50 50 90 40 50

> order(v1)

[1] 2 1 6 3 4 7 5

> v1[order(v1)]

[1] 30 40 40 50 50 50 90


그래서 v1[order(v1)] 하면 sort(v1)과 동일한 결과를 얻을 수 있다.

사용 목적과 결과는 같지만 아까도 말했듯이, sort()는 데이터 프레임에서 사용할 수 없지만 order()는 데이터 프레임에서 사용된다.


 >  v123

  v1   v2 v3

1 40 5100  A

2 30 6500  B

3 50 2000  A

4 50 2000  B

5 90 9000  A

6 40 4500  A

7 50 3000  B

>

> # v123 데이터 프레임의 전체 행을 v1 오름차순, v2 내림차순, v3 오름차순의 순서대로 정렬 

> v123_order <- v123[order(v1, -v2, v3),]

> v123_order

  v1   v2 v3

2 30 6500  B

1 40 5100  A

6 40 4500  A

7 50 3000  B

3 50 2000  A

4 50 2000  B

5 90 9000  A


인덱스 순서대로 불러왔다고 보면 이해하기 쉽다.


(3) dplyr의 arrange() 

dplyr패키지의 arrange()함수를 사용하는 방법도 있다.

arrange()는 행(관측치)를 변수의 오름차순으로 정렬한다. 

내림차순으로 정렬하고자하는 경우에는 desc()옵션을 추가해주면 된다. 

// arrange(DATAFRAME_NAME, VAR1, desc(VAR2), ... )


> # dplyr패키지 로드 

> library(dplyr)


다음의 패키지를 부착합니다: ‘dplyr’


The following objects are masked from ‘package:stats’:


    filter, lag


The following objects are masked from ‘package:base’:


    intersect, setdiff, setequal, union


> arrange(v123, v1, desc(v2), v3)

  v1   v2 v3

1 30 6500  B

2 40 5100  A

3 40 4500  A

4 50 3000  B

5 50 2000  A

6 50 2000  B

7 90 9000  A

>  


'통계 > R' 카테고리의 다른 글

[Data Science] R의 dplyr 패키지  (0) 2018.02.19
[R] apply() 함수  (0) 2018.02.16
[R] 데이터타입  (0) 2018.02.02
[Rstudio] 단축키  (0) 2018.01.18
[R] data frame 결합  (0) 2017.10.08