6.4 요인의 수준

6.4.1 요인 수준의 확인

levels() 함수를 사용하여 요인의 수준을 확인할 수 있으며, nlevels() 함수를 이용하면 수준의 수를 확인할 수 있습니다.

levels(floor_type)             # floor_type 변수에 있는 수준을 반환합니다. 결과도 문자형 벡터입니다.
## [1] "cement" "earth"  "stone"
nlevels(floor_type)            # floor_type 변수의 수준의 갯수를 반환합니다.
## [1] 3

때로는 요인의 순서가 중요하지 않습니다.

6.4.2 수준의 순서 지정

때로는 요인의 순서가 알파벳이나 가나다 순이 아닌 의미에 따른 순서가 중요할 수 있습니다. 이런 경우 요인들의 수준에 순서를 지정할 수 있습니다. 예를 들어, “낮음,” “중간,” “높음” 등이 수준인 경우 이러한 수준을 지정하지 않으면 R은 자동으로 가나다 순인 “낮음,” “높음,” “중간” 등의 순서로 수준의 순서를 정하게 됩니다. 그러나 이는 분석의 관점에서 보면 옳지 않는 순서입니다. 이러한 수준의 순서는 데이터의 시각화를 향상시키거나 특정 유형의 분석에 필요할 수 있습니다.

여기에서 floor_type 요인에서 수준을 우리가 원하는 순서로 정렬하는 방법은 다음과 같습니다. factor() 함수에 levels = 인수에 우리가 원하는 순서로 문자형 벡터로 지정해 주면 됩니다.

floor_type                  # 현재 수준의 순서가 출력됩니다.
## [1] earth  cement cement earth  stone 
## Levels: cement earth stone
# levels =  인수에 문자형 벡터로 순서를 지정해 줍니다.
floor_type <- factor(floor_type, levels = c("earth", "cement"))
floor_type                  # 수준의 순서가 바뀌어 반환됩니다.
## [1] earth  cement cement earth  <NA>  
## Levels: earth cement

6.4.3 수준 이름의 변경

수준의 이름을 쉽게 바꿀 수도 있습니다. 예를 들어, 실수를해서 “cement”가 아닌 “brick”으로 다시 코딩해야 한다고 가정해 보겠습니다. 그러면 levels() 함수에서 확인했던 수준의 이름을 이 levels() 함수를 이용하여 수정해 주면 되는 겁니다. 다음의 예에서 확인해 보겠습니다.

levels(floor_type)                  # floor_type 변수의 수준이름이 반환됩니다.
## [1] "earth"  "cement"
levels(floor_type)[2] <- "brick"    # 수준이름의 2번째 값을 "brick"으로 수정합니다.
levels(floor_type)                  # 수정된 수준이름이 반환됩니다.
## [1] "earth" "brick"
floor_type                          # floor_type을 출력해 보면 cement가 모두 brick으로 변경됩니다.
## [1] earth brick brick earth <NA> 
## Levels: earth brick

6.4.4 수준의 서열화

지금까지 살펴본 요인은 명목 변수처럼 순서가 지정되지 않았습니다. R은 명목 변수(nominal variable)서열 변수(ordinal variable)의 차이를 알지 못합니다. factor() 함수 내에 ordered=TRUE라는 옵션을 사용하여 요인에 서열을 지정할 수 있습니다. 그러면 서열화된 요인을 만들 수 있습니다. 그리고 이 서열화된 요인서열 변수가 되는 것입니다.

서열화된 수준은 < 기호에 의해 낮은 순위부터 높은 순위로그 순위를 표시합니다.

그리고 요인이 서열화된 요인인지의 확인은 is.ordered()로 확인할 수 있습니다.

floor_type_ordered <- factor(floor_type, ordered=TRUE)
floor_type_ordered                   # 서열이 설정된 요인
## [1] earth brick brick earth <NA> 
## Levels: earth < brick
is.ordered(floor_type_ordered)       # 서열화된 요인인지 확인합니다.
## [1] TRUE

6.4.5 ordered() 함수를 이용한 서열형 요인 변수의 생성

한편 ordered() 함수로 서열화된 요인을 생성할 수 있습니다. 그리고 요인이 서열화되어 있는지는 is.ordered() 함수로 확인할 수 있습니다.

ordered_floor <- ordered(c("earth", "cement", "cement", "earth"), c("earth", "cement"))
ordered_floor                      
## [1] earth  cement cement earth 
## Levels: earth < cement
is.ordered(ordered_floor)             # ordered_floor 변수가 서열화된 요인변수인지 확인합니다
## [1] TRUE