6.5 데이터 유형 강제 변환

6.5.1 요인형으로의 변환하기

벡터 변수를 요인형으로 변환하고자 할 경우 as.factor() 함수를 이용하면 됩니다.

st_data <- c("earth", "cement", "cement", "earth")  # st_data는 4개의 문자열 요소를 갖는 문자형 벡터입니다.
st_data
## [1] "earth"  "cement" "cement" "earth"
floor <- as.factor(st_data)                         # factor() 함수의 사용과 차이가 없습니다.
is.factor(floor)                                    # floor가 요인 변수인지 확인합니다
## [1] TRUE

as.factor() 함수는 factor() 함수처럼 levels=ordered =인수를 사용할 수 없습니다.

수준의 설정을 위해서는levels() 함수를 이용하고, 서열을 설정하기 위해서는 ordered() 함수를 이용해야 합니다.

6.5.2 요인을 다른 유형으로 강제 변환하기

요인을 문자형 벡터로 변환하려면 as.character(x) 함수를 사용하면 됩니다.

as.character(floor_type)
## [1] "earth" "brick" "brick" "earth" NA

수준이 숫자로 표시되는 요인 (예 : 농도 수준 또는 연도)을 숫자 벡터로 변환하는 것은 약간 까다 롭습니다. 이 as.numeric() 함수는 수준이 아닌 요인의 인덱스 값을 반환하므로 완전히 새로운 (이 경우 원하지 않는) 숫자 집합이 생성됩니다. 이를 방지하는 한 가지 방법은 인수를 문자로 변환 한 다음 숫자로 변환하는 것입니다. 또 다른 방법은 levels()기능 을 사용하는 것입니다. 비교:

year_fct <- factor(c(1990, 1983, 1977, 1998, 1990))
as.numeric(year_fct)                     # 요인형 데이터를 바로 숫자형으로 강제변환하면
## [1] 3 2 1 4 3
                                         # 1990 ~ 1990이 아닌 1 ~ 5 등의 정수값으로 변환이 됩니다.
as.numeric(as.character(year_fct))       # 먼저 요인형을 '문자형'으로 변환한 다음에 '숫자형'으로 변환해야 합니다.
## [1] 1990 1983 1977 1998 1990
as.numeric(levels(year_fct))[year_fct]   # 가장 추천하는 방법입니다.
## [1] 1990 1983 1977 1998 1990

위에서 as.numeric(as.character(year_fct))as.numeric(levels(year_fct))[year_fct]이 같은 결과를 가져옴을 알 수 있습니다.

그렇지만 가능한 한 levels() 함수를 활용하는 후자의 방식을 사용할 것을 권장합니다.

참고로 권장되는 levels()접근 방식에서는 세 가지 중요한 단계가 발생합니다.

  • 모든 요인 수준을 확인합니다 : levels(year_fct)
  • 이 수준을 사용하여 숫자 값으로 변환합니다 : as.numeric(levels(year_fct))
  • 그런 다음 year_fct대괄호 안에 사용하여 숫자 값을 확인합니다. as.numeric(levels(year_fct))[year_fct]