0Pricing
R Academy · 강의

열을 기준으로 데이터 프레임 정렬하기

order()와 dplyr의 arrange()를 사용하여 전체 데이터 프레임을 정렬합니다.

열을 기준으로 데이터 프레임 정렬하기은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

한 열을 기준으로 데이터 프레임 정렬하기

데이터 프레임을 정렬하는 표준 base-R 방식은 관심 있는 열에 order()를 사용하고, 그 결과로 얻은 인덱스를 사용하여 행의 순서를 바꾸는 것입니다. 인덱스 뒤의 쉼표는 모든 열을 선택합니다.

df <- data.frame(
  name = c('Charlie', 'Alice', 'Bob', 'Diana'),
  age  = c(35, 28, 42, 31),
  salary = c(55000, 48000, 72000, 61000)
)
df[order(df$age), ]

음수로 내림차순 정렬하기

수치형 열의 경우 order() 안에서 열에 음수를 취하여 정렬 방향을 반대로 바꿉니다. 마이너스 기호는 모든 값의 부호를 바꾸므로, 정렬 관점에서는 최댓값이 최솟값이 됩니다.

df <- data.frame(
  name   = c('Charlie', 'Alice', 'Bob', 'Diana'),
  salary = c(55000, 48000, 72000, 61000)
)
# Highest salary first
df[order(-df$salary), ]

여러 열 기준 정렬

order()에 여러 열을 전달하면 기본 기준으로 정렬한 다음 보조 기준으로 정렬할 수 있습니다. 두 번째 인수는 첫 번째 기준에서 발생한 동률을 구분합니다. 이는 SQL의 ORDER BY col1, col2와 같은 방식입니다.

df <- data.frame(
  dept   = c('Eng', 'HR', 'Eng', 'HR', 'Eng'),
  name   = c('Zara', 'Bob', 'Alice', 'Eve', 'Mike'),
  salary = c(90000, 55000, 85000, 58000, 78000)
)
# Sort by dept, then by salary descending within dept
df[order(df$dept, -df$salary), ]

문자형 열 정렬하기

문자형 열을 기준으로 정렬하는 방식도 같습니다. order()가 사전식 정렬을 처리합니다. 알파벳 역순으로 정렬하려면 음수 대신 decreasing = TRUE를 사용합니다(음수는 수치형에만 사용할 수 있음).

df <- data.frame(
  city    = c('Paris', 'Athens', 'Berlin', 'London'),
  pop_mil = c(2.1, 0.6, 3.6, 9.0)
)
# Alphabetical by city
df[order(df$city), ]
# Reverse alphabetical
df[order(df$city, decreasing = TRUE), ]

정렬 후 행 번호 재설정하기

정렬한 후에도 행 이름은 원래 위치를 반영합니다(예: 3, 1, 4, 2). 이를 1부터 시작하는 연속 정수로 재설정하려면 row.names(df) <- NULL을 설정하거나 결과를 data.frame()으로 감쌉니다.

df <- data.frame(
  x = c(30, 10, 20),
  y = c('c', 'a', 'b')
)
sorted <- df[order(df$x), ]
cat('Before reset:\n'); print(sorted)
row.names(sorted) <- NULL
cat('After reset:\n');  print(sorted)

NA 값과 함께 정렬하기

정렬 열에 NA가 포함되어 있으면 order()는 기본적으로 이를 끝에 배치합니다. na.last = FALSE를 사용하면 NA가 있는 행을 맨 위로 이동할 수 있으며, 먼저 해당 행을 필터링하여 제외할 수도 있습니다.

df <- data.frame(
  name  = c('Alice', 'Bob', 'Carol', 'Dave'),
  score = c(85, NA, 92, NA)
)
cat('NAs last (default):\n')
print(df[order(df$score), ])
cat('NAs first:\n')
print(df[order(df$score, na.last = FALSE), ])

현대적인 대안으로 사용하는 dplyr::arrange()

dplyr 패키지는 더 깔끔한 대안으로 arrange()를 제공합니다. dplyr는 base R에 포함되어 있지 않지만, 이 문법을 알아 두면 현대적인 R 코드를 읽는 데 도움이 됩니다. 참고: 여기서 isRunnable이 true인 것은 문법을 보여 주기 위한 것일 뿐이며, 실행하려면 dplyr을 설치해야 합니다.

# dplyr::arrange() syntax (requires dplyr installed)
# library(dplyr)
# df |> arrange(salary)           # ascending
# df |> arrange(desc(salary))     # descending
# df |> arrange(dept, desc(salary)) # multi-column

# Equivalent base R:
df <- data.frame(dept=c('A','B','A'), salary=c(50,70,60))
df[order(df$dept, -df$salary), ]

수준 순서에 따른 팩터 정렬

팩터 열은 알파벳순이 아니라 수준 순서에 따라 정렬됩니다. 따라서 정렬하기 전에 팩터 수준을 명시적으로 설정하여 사용자 지정 정렬 순서를 정의할 수 있습니다.

df <- data.frame(
  priority = factor(c('Low', 'High', 'Medium', 'High', 'Low'),
                    levels = c('Low', 'Medium', 'High')),
  task = c('T1', 'T2', 'T3', 'T4', 'T5')
)
# Sorts by factor level (Low < Medium < High)
df[order(df$priority), ]

정렬하고 상위 행 선택하기

데이터 프레임을 정렬한 다음 head()로 상위 N개 행을 가져오거나 tail()로 하위 N개 행을 가져오는 패턴을 자주 사용합니다. 이는 SQL의 ORDER BY ... LIMIT N에 해당하는 base-R 방식입니다.

df <- data.frame(
  product = c('A', 'B', 'C', 'D', 'E'),
  revenue = c(1200, 4500, 890, 3100, 2750)
)
# Top 3 by revenue
top3 <- head(df[order(-df$revenue), ], 3)
row.names(top3) <- NULL
print(top3)

제자리 정렬과 할당하는 정렬

정렬은 원래 데이터 프레임을 수정하지 않고 새로운 데이터 프레임을 반환합니다. 결과를 항상 변수에 할당해야 합니다(새 변수를 사용하거나 원래 변수를 덮어쓸 수 있음). 정렬되지 않은 버전이 더 이상 필요하지 않다면 원래 변수를 덮어써도 괜찮습니다.

df <- data.frame(
  x = c(3, 1, 4, 1, 5, 9),
  y = c('c', 'a', 'd', 'b', 'e', 'i')
)
# Safe: assign to new variable
df_sorted <- df[order(df$x), ]
# Or overwrite original:
df <- df[order(df$x), ]
row.names(df) <- NULL
print(df)

전체 정렬 작업 흐름

다음은 현실적인 데이터 프레임 정렬 작업 흐름의 전체 예입니다. 직원들을 부서 이름의 오름차순으로 정렬한 다음 급여의 내림차순으로 정렬하고, 행 인덱스를 재설정한 후 결과를 깔끔하게 표시합니다.

employees <- data.frame(
  name   = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
  dept   = c('IT', 'HR', 'IT', 'HR', 'IT'),
  salary = c(85000, 58000, 92000, 63000, 78000)
)
result <- employees[order(employees$dept, -employees$salary), ]
row.names(result) <- NULL
print(result)

빠른 확인

base R을 사용하여 수치형 열 df$salary를 기준으로 데이터 프레임 df를 내림차순으로 정렬하려면 어떻게 해야 합니까?

데이터 프레임 정렬: 핵심 내용

데이터 프레임 정렬의 핵심 내용:

  • base R 관용구: df[order(df$col), ]
  • 수치형 내림차순: order(-df$col) 안에서 -로 음수를 취합니다.
  • 문자형 내림차순: decreasing = TRUE 인수를 사용합니다.
  • 여러 열 기준: order(df$a, df$b) — 보조 정렬 기준으로 동률을 구분합니다.
  • 팩터는 알파벳순이 아니라 정의된 수준 순서에 따라 정렬됩니다.
  • 정렬한 후 row.names(df) <- NULL로 행 이름을 재설정합니다.
  • 현대적인 대안: 내림차순에 desc()를 함께 사용하는 dplyr::arrange()
df <- data.frame(
  name = c('Zara', 'Ana', 'Bob', 'Ana'),
  score = c(90, 85, 92, 88)
)
# Sort by name asc, score desc
result <- df[order(df$name, -df$score), ]
row.names(result) <- NULL
print(result)

자주 묻는 질문

“열을 기준으로 데이터 프레임 정렬하기” 강의는 무료인가요?

네 — “열을 기준으로 데이터 프레임 정렬하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“열을 기준으로 데이터 프레임 정렬하기”에서 뭘 배우나요?

order()와 dplyr의 arrange()를 사용하여 전체 데이터 프레임을 정렬합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“열을 기준으로 데이터 프레임 정렬하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. sort()로 벡터 정렬하기
  2. 유연한 정렬을 위한 order()
  3. rank()로 값 순위 매기기
  4. 열을 기준으로 데이터 프레임 정렬하기
← R Academy(으)로 돌아가기