6.5 데이터 유형 강제 변환
6.5.1 요인형으로의 변환하기
벡터 변수를 요인형으로 변환하고자 할 경우 as.factor()
함수를 이용하면 됩니다.
<- c("earth", "cement", "cement", "earth") # st_data는 4개의 문자열 요소를 갖는 문자형 벡터입니다.
st_data st_data
## [1] "earth" "cement" "cement" "earth"
<- as.factor(st_data) # factor() 함수의 사용과 차이가 없습니다.
floor 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()
기능 을 사용하는 것입니다. 비교:
<- factor(c(1990, 1983, 1977, 1998, 1990))
year_fct 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]