본문 바로가기
R 프로그래밍/R basic

정렬(sorting)하기

by 찐남 2022. 1. 5.
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에 내장되어 있는 함수 사용

 

반응형

댓글