더북(TheBook)

예를 들어, 성별을 팩터로 만드는 경우를 생각해보자. 성별은 범주형 데이터 중 명목형 데이터에 해당하며, “m”(남성Male)과 “f”(여성Female) 두 가지 값이 가능하다. 따라서 남성을 저장한 변수 sex를 다음과 같이 생성할 수 있다.

> sex <- factor("m", c("m", "f"))
> sex
[1] m
Levels: m f

위 코드에서 sex에는 “m”이 저장되었고, 이 팩터가 담을 수 있는 값의 레벨은 “m”, “f”로 제한되었다. c( )는 ‘2.4 벡터’ 절에서 설명할 벡터를 뜻하며, c(“m”, “f”)는 쉽게 “m”, “f”가 저장된 배열로 생각하면 된다.

팩터 변수는 nlevels( )로 레벨의 수를 알 수 있고, levels( )로 레벨의 목록을 볼 수 있다.

> nlevels(sex)
[1] 2
> levels(sex)
[1] "m" "f"

levels( )의 반환 값은 벡터며, 벡터는 다른 언어의 배열처럼 사용할 수 있다. 따라서 각 레벨의 값을 다음과 같이 구할 수 있다. R에서 색인(인덱스)Index은 0이 아닌 1부터 시작한다는 점에 유의하기 바란다.

> levels(sex)[1]
[1] "m"
> levels(sex)[2]
[1] "f"

팩터 변수에서 레벨 값을 직접 수정하고자 한다면 levels( )에 값을 할당하면 된다. “m”을 “male”로, “f”를 “female”로 바꿔보자.

> sex
[1] m
Levels: m f
> levels(sex) <- c("male", "female")
> sex
[1] male
Levels: male female

여러 개의 값을 팩터로 만들고자 한다면 factor( )의 인자 x에 벡터를 지정한다.

> factor(c("m", "m", "f"), c("m", "f"))
[1] m m f
Levels: m f

levels 인자를 생략하면 데이터로부터 자동으로 레벨의 목록을 파악한다.

> factor(c("m", "m", "f"))
[1] m m f
Levels: f m

factor( )는 기본적으로 데이터에 순서가 없는 명목형 데이터를 만든다. 순서형 데이터를 원한다면 ordered( )를 사용하거나 factor( ) 호출 시 ordered=TRUE를 지정한다.

> ordered("a", c("a", "b", "c"))
[1] a
Levels: a < b < c

앞서와 달리 ‘Levels:’에 순서가 ‘a < b < c’로 표시되어 있음을 볼 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.