R 데이터프레임 정렬: order() 함수 사용법 및 예제
⚡ 스마트 요약
R에서 데이터프레임을 정렬하려면 `order()` 함수를 사용해야 합니다. 이 함수는 값이 아닌 행의 위치를 반환합니다. 이 위치를 대괄호 안에 넣으면 행이 한 열씩, 여러 열씩 또는 내림차순으로 정렬됩니다.

R에서 데이터 정렬하기
데이터 분석에서는 다음을 수행할 수 있습니다. 종류 데이터세트의 특정 변수에 따라 데이터를 분석합니다. R에서는 order() 함수의 도움을 받을 수 있습니다. R에서는 연속변수나 요인변수의 벡터를 쉽게 정렬할 수 있습니다. 데이터 정렬은 다음과 같습니다. 오름차순 or 하강하는 주문.
구문 :
sort(x, decreasing = FALSE, na.last = NA)
논쟁:
- x: 연속형 변수 또는 범주형 변수를 포함하는 벡터
- 감소정렬 방향을 제어합니다. 기본값은 내림차순이 FALSE로 설정되어 있어 오름차순으로 정렬됩니다.
- 나.라스트: 결측값(NA)을 마지막에 배치할지 여부를 나타냅니다. sort() 함수는 기본적으로 결측값을 제외하고 NA를 사용하며, order() 함수는 결측값을 유지하고 마지막에 배치합니다.
R에서 sort(), order(), rank() 함수 비교
위의 구문은 sort() 함수에 해당하지만, 이 페이지의 모든 예제에서는 order() 함수를 호출합니다. 두 함수는 서로 다른 목적을 가지고 있으며, 이들을 혼용하는 것이 정렬이 실패하는 가장 흔한 원인입니다. rank() 함수가 나머지 세 함수를 완성합니다.
| 함수 | 반품 | 사용할 때 사용하세요 | 기본 NA 처리 |
|---|---|---|---|
| 종류() | 가치 자체는 순서대로 | 정렬된 벡터만 있으면 됩니다. | na.last = NA이므로 NA는 삭제됩니다. |
| 주문하다() | 정렬 순서를 생성하는 행 위치 | 데이터프레임 전체를 재정렬해야 합니다. | na.last = TRUE이므로 NA가 마지막에 옵니다. |
| 계급() | 각 요소의 원래 위치에서의 순위 | 재정렬된 테이블이 아니라 순위 열이 필요합니다. | na.last = TRUE |
order() 함수는 위치를 반환하기 때문에 이 페이지 전체에서 사용되는 대괄호 부분집합을 지정할 수 있는 세 가지 함수 중 유일한 함수입니다. R의 order() 함수에 대한 기본 문서 정렬 알고리즘을 선택하는 메서드 인수를 포함하여 모든 인수를 나열합니다.
예제 1: 데이터 프레임을 한 열을 기준으로 정렬하기
예를 들어, tibble 데이터프레임을 생성하고 하나 또는 여러 변수를 정렬할 수 있습니다. tibble 데이터프레임은 기존의 데이터프레임 형식을 현대적으로 재해석한 것입니다. 데이터 프레임tibble은 데이터 프레임의 구문을 개선하고, 특히 문자를 팩터로 변환하는 것과 같은 번거로운 데이터 유형 서식 지정을 방지합니다. 또한, 이 글의 목적에 맞게 데이터 프레임을 직접 생성하는 편리한 방법이기도 합니다. tibble에 대한 자세한 내용은 vignette를 참조하십시오. https://tibble.tidyverse.org/articles/tibble.html
아래 코드는 5개의 무작위 열로 이루어진 50행 tibble을 생성한 다음 c1의 값을 기준으로 각 행을 정렬합니다. set.seed(1234)는 무작위 추첨을 고정하므로 어떤 머신에서도 동일한 숫자가 나타납니다.
library(dplyr) set.seed(1234) data_frame <- tibble( c1 = rnorm(50, 5, 1.5), c2 = rnorm(50, 5, 1.5), c3 = rnorm(50, 5, 1.5), c4 = rnorm(50, 5, 1.5), c5 = rnorm(50, 5, 1.5) ) # Sort by c1 df <-data_frame[order(data_frame$c1),] head(df)
출력:
# A tibble: 6 x 5 ## c1 c2 c3 c4 c5 ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 1.481453 3.477557 4.246283 3.686611 6.0511003 ## 2 1.729941 5.824996 4.525823 6.753663 0.1502718 ## 3 2.556360 6.275348 2.524849 6.368483 5.4787404 ## 4 2.827693 4.769902 5.120089 3.743626 4.0103449 ## 5 2.988510 4.395902 2.077631 4.236894 4.6176880 ## 6 3.122021 6.317305 5.413840 3.551145 5.6067027
닫는 괄호 앞의 쉼표는 중요합니다. df[order(…), ]는 행의 순서를 바꾸고, df[, order(…)]는 열의 순서를 바꿉니다.
예제 2: 여러 열을 기준으로 정렬하기
order() 함수에 전달되는 추가 인수는 각각 이전 인수와의 우선순위를 결정하는 역할을 합니다. 여기서는 프레임이 c3 값을 기준으로 정렬되고, c3 값이 같은 행들은 c4 값을 기준으로 정렬됩니다.
# Sort by c3 and c4
df <-data_frame[order(data_frame$c3, data_frame$c4),]
head(df)
출력:
# A tibble: 6 x 5 ## c1 c2 c3 c4 c5 ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 2.988510 4.395902 2.077631 4.236894 4.617688 ## 2 2.556360 6.275348 2.524849 6.368483 5.478740 ## 3 3.464516 3.914627 2.730068 9.565649 6.016123 ## 4 4.233486 3.292088 3.133568 7.517309 4.772395 ## 5 3.935840 2.941547 3.242078 6.464048 3.599745 ## 6 3.835619 4.947859 3.335349 4.378370 7.240240
예제 3: 한 열은 내림차순으로, 다른 열은 오름차순으로 정렬
각 열은 고유한 방향을 가질 수 있습니다. 숫자 열 앞에 마이너스 부호를 붙이면 해당 열만 반전되므로 아래 정렬은 c3을 기준으로 내림차순, c4를 기준으로 오름차순으로 실행됩니다.
# Sort by c3(descending) and c4(ascending)
df <-data_frame[order(-data_frame$c3, data_frame$c4),]
head(df)
출력:
# A tibble: 6 x 5 ## c1 c2 c3 c4 c5 ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 4.339178 4.450214 8.087243 4.5010140 8.410225 ## 2 3.959420 8.105406 7.736312 7.1168936 5.431565 ## 3 3.339023 3.298088 7.494285 5.9303153 7.035912 ## 4 3.397036 5.382794 7.092722 0.7163620 5.620098 ## 5 6.653446 4.733315 6.520536 0.9016707 4.513410 ## 6 4.558559 4.712609 6.380086 6.0562703 5.044277
마이너스 부호 트릭은 숫자 열에서만 작동합니다. 문자열 또는 팩터 열의 경우 order(xtfrm(df$col), decreasing = TRUE)를 사용하거나 다음에 표시되는 dplyr 접근 방식으로 전환하십시오.
dplyr의 arrange() 함수를 사용하여 데이터프레임을 정렬합니다.
대괄호를 사용하는 방식은 여러 열과 방향이 관련될 경우 프레임 이름이 모든 인수 안에 반복되기 때문에 읽기가 어려워집니다. dplyr `arrange()` 함수는 이러한 반복을 제거합니다. 열 이름은 한 번만 지정되고, `desc()` 함수는 역순으로 나열된 열을 표시합니다.
library(dplyr) # The same three sorts written with arrange() data_frame %>% arrange(c1) # Example 1 data_frame %>% arrange(c3, c4) # Example 2 data_frame %>% arrange(desc(c3), c4) # Example 3
알아두면 유용한 세 가지 실질적인 차이점이 있습니다.
- 가독성: arrange(desc(c3), c4)는 의도를 직접적으로 나타내는 반면 order(-data_frame$c3, data_frame$c4)는 마이너스 부호 뒤에 의도를 숨깁니다.
- 컬럼 유형desc() 함수는 숫자 열뿐만 아니라 문자열 및 팩터 열에서도 작동하므로 xtfrm()을 이용한 해결 방법이 필요하지 않습니다.
- 결 측값arrange() 함수는 방향에 관계없이 항상 NA 값을 맨 마지막에 배치하는 반면, order() 함수는 na.last를 사용하여 NA 값을 이동할 수 있습니다.
arrange() 함수는 원본 데이터 프레임을 그대로 두고 새로운 데이터 프레임을 반환합니다. 이는 대괄호를 사용한 버전과 동일하므로, 결과 프레임을 저장하려면 이름을 지정해야 합니다. 그룹화된 프레임은 .by_group = TRUE 옵션을 제공했을 때만 각 그룹 내에서 정렬됩니다.
R에서 문자형 데이터, 요인형 데이터 및 결측값 정렬하기
숫자 열은 예측 가능한 방식으로 정렬됩니다. 하지만 텍스트, 범주 및 공백은 그렇지 않으며, 이 세 가지 각각에 대해 다른 결정이 필요합니다.
결측값입니다. sort()와 order() 함수는 NA 값을 어떻게 처리할지에 대해 의견이 다르기 때문에 동일한 열에 대해 서로 다른 행 개수 계산 결과가 나올 수 있습니다.
x <- c(3, NA, 1, 2) sort(x) # missing values dropped sort(x, na.last = TRUE) # missing values pushed to the end order(x) # NA indexed last by default order(x, na.last = FALSE) # NA indexed first
요인. A 인자 알파벳순이 아니라 레벨 순서대로 정렬됩니다. 이는 낮음, 중간, 높음과 같이 순서가 있는 범주에 원하는 결과이며, 값이 나타난 순서대로 레벨이 생성된 경우에는 원하지 않는 결과입니다.
grades <- factor(c("low", "high", "medium"), levels = c("low", "medium", "high")) sort(grades) # follows the level order sort(as.character(grades)) # plain alphabetical order
문자 열. 일반 텍스트는 로케일 정렬 방식에 따라 정렬되므로 대소문자와 악센트 기호로 인해 기기마다 정렬 결과가 달라질 수 있습니다. 이러한 문제를 방지하려면 다음 두 가지를 실천하세요. 정렬하기 전에 `class(df$col)`을 확인하고, 텍스트로 저장된 숫자는 `as.numeric()`을 사용하여 숫자로 변환하여 "10"이 "2"보다 앞에 오지 않도록 합니다.
