Cookbook for R을 기반으로 하여 작성하였습니다.
벡터, 행렬 또는 데이터 프레임을 정렬하려고 합니다. 어떻게 하면 될까요?
하나씩 살펴보도록 할게요.
벡터(Vector)
# 랜덤 하게 정렬된 예시 벡터 생성
v <- sample(101:110)
# 벡터 정렬(기본값은 오름차순 정렬)
sort(v)
# 벡터 정렬(내림차순 정렬)
sort(v, decreasing=TRUE)
데이터 프레임(data frame)
하나 이상의 열에서 데이터 프레임을 정렬하려면,
plyr 패키지의 정렬 기능을 사용하거나 R의 내장 기능을 사용할 수 있어요.
arrange 함수는 사용하기가 훨씬 쉽지만 별도 패키지(plyr)를 설치해야 합니다.
# 예시 데이터 프레임 생성
df <- data.frame (id=1:4, weight=c(20,27,24,22), size=c("small", "large", "medium", "large"))
df
library(plyr)
# weight 열을 기준으로 정렬. 아래 두 개의 결과가 모두 동일
arrange(df, weight) # plyr 패키지에 있는 arrange 함수 사용
df[ order(df$weight), ] # 기본적으로 R에 내장되어 있는 함수 사용
# size 열로 1차 정렬, weight 열로 2차 정렬
arrange(df, size, weight) # plyr 패키지에 있는 arrange 함수 사용
df[ order(df$size, df$weight), ] # 기본적으로 R에 내장되어 있는 함수 사용
# 데이터 프레임의 모든 열을 기준으로 왼쪽에서 오른쪽으로 정렬
# 이 특정 예에서는 순서가 변경되지 않음
df[ do.call(order, as.list(df)), ]
(※ 참고로 size 열은 factor level의 순서로 정렬됩니다. 이 경우 level은 자동으로 알파벳순으로 할당되었으므로(데이터 프레임 생성 시)
"large" 값이 먼저이고, "small" 값이 마지막으로 위치하게 돼요.)
<내림 차순 정렬>
decreasing=TRUE 인수를 사용하여 정렬의 전체 순서를 반대로 할 수 있어요.
특정 열의 방향을 반대로 하는 방법은 데이터 유형에 따라 달라요.
- 숫자: 변수 이름 앞에 -를 넣습니다 (ex. df[ order(-df$weight), ]).
- factor: 정수로 변환하고 변수 이름 앞에 -를 넣습니다(ex. df[ order(-xtfrm(df$size)), ]).
- 문자: 간단한 방법이 없어요. 다만, 가능한 한 가지 방법은 먼저 factor로 변환한 다음 위와 같이 정렬하는 것입니다.
# Reverse sort by weight 열 기준으로 내림 차순 정렬. 아래 3개의 결과는 모두 동일
arrange(df, -weight) # plyr 패키지에 있는 arrange 함수 사용
df[ order(df$weight, decreasing=TRUE), ] # 기본적으로 R에 내장되어 있는 함수 사용
df[ order(-df$weight), ] # 기본적으로 R에 내장되어 있는 함수 사용
# Sort by size 열 기준 오름차순 정렬 후, weight 열 기준 내림차순 정렬
arrange(df, size, -weight) # plyr 패키지에 있는 arrange 함수 사용
df[ order(df$size, -df$weight), ] # 기본적으로 R에 내장되어 있는 함수 사용
# size 열 기준 내림차순 정렬 후, weight 열 기준 오름차순 정렬
# factor형 변수에 대해서는 xtfrm()에 대한 호출 필요
arrange(df, -xtfrm(size), weight) # plyr 패키지에 있는 arrange 함수 사용
df[ order(-xtfrm(df$size), df$weight), ] # 기본적으로 R에 내장되어 있는 함수 사용
반응형
'R 프로그래밍 > R basic' 카테고리의 다른 글
데이터 프레임의 열 이름 바꾸기 (0) | 2022.01.09 |
---|---|
factor level 이름 변경하기 (0) | 2022.01.06 |
데이터 요약(Data summary) (0) | 2021.12.31 |
[R 그래픽스]정당별 국회의원 의석 수 그래프로 표현하기 (0) | 2021.12.19 |
[R 그래픽스] 워드 클라우드(Word Cloud) 생성하기 (0) | 2021.10.31 |
댓글