R) 전처리 - 변수 정렬

R) 전처리 - 변수 정렬

데이터프레임의 row기준으로 정렬하는 예제는 많지만 column인 변수 기준으로 정렬하는 예제는 많지 않다. 변수가 많은 경우 한 번에 처리하는 방법을 초급/중급/고급 으로 나누어서 알아보자.

예를 들어 다음과 같은 데이터프레임이 있다고 하자.

1
2
3
4
5
6
7
8
df = data.frame(b = 1:3,
c = 2:4,
a = 3:5)
df
## b c a
## 1 1 2 3
## 2 2 3 4
## 3 3 4 5

초급

변수를 a, b, c 로 정렬하려면 매우 간단하게 다음과 같이 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
df[, c(3, 1, 2)]
## a b c
## 1 3 1 2
## 2 4 2 3
## 3 5 3 4

df[, c("a", "b", "c")]
## a b c
## 1 3 1 2
## 2 4 2 3
## 3 5 3 4

중급

하지만 변수가 매우 많을 때는 이렇게 손으로 할 수 없다는 것이 문제다. 보통 row를 정렬할 때는 order() 함수를 사용하지만, column을 정렬할 때에도 사용할 수 있다는 것을 아는 사람은 그렇게 많지 않다.

1
2
3
4
5
6
7
8
9
10
11
colnames(df)
## [1] "b" "c" "a"

order(colnames(df))
## [1] 3 1 2

df[, order(colnames(df))]
## a b c
## 1 3 1 2
## 2 4 2 3
## 3 5 3 4

고급

단순히 변수명이 아니라 변수에 있는 특정 값을 기준으로 정렬을 하려면 어떻게 할까?

다음과 같이 apply() 함수 또는 sapply() 함수로 변수별 일괄 계산을 하여 그 값을 토대로 변수를 정렬 할 수 있겠다. 여기서는 별도의 사용자 정의 함수를 사용하지는 않았고, 각 변수의 원소 합 기준으로 그 합이 가장 큰 변수를 가장 왼쪽에 위치시키는 식으로 정렬하였다.

1
2
3
4
5
6
7
8
9
10
11
12
sapply(df, FUN = "sum")
## b c a
## 6 9 12

order(sapply(df, FUN = "sum"), decreasing = TRUE)
## [1] 3 2 1

df[, order(sapply(df, FUN = "sum"), decreasing = TRUE)]
## a c b
## 1 3 2 1
## 2 4 3 2
## 3 5 4 3
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×