# 랜덤 하게 정렬된 예시 벡터 생성 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에 내장되어 있는 함수 사용
댓글