티스토리 뷰
팩터(Factor)
Factor 란 "정해진 범주 내에서 카테고리별로 분석(범주형 자료 분석)을 하기 위해 주로 사용되는 데이터 자료형"입니다.
그림으로 표현하자면 "하나의 통에 , 각각 범주가 있는 스마일들의 모임"과 같이 표현할 수 있습니다.
남, 녀 / 상, 중, 하 같은, 중간에 다른 값이 포함될 수 없는 값을 범주형 데이터라고 합니다.
Factor 형 변수를 만들 때 사전에 정의되어진 범주이외는 정의되지 않기때문에, 정의되어있지 않는 데이터를 입력하면 NA로 처리됩니다.
(용어에서 범주 = 레벨 = 카테고리 다 같은 의미입니다.)
성별 변수가 있다면, 정의되어진 레벨(남, 녀) 이외의 다른 값은 절대 허용되지 않는다는 뜻이죠.
범주형 자료분석에 주로 사용되고, 라인(범주)별로의 분포 비교를 할 때 유용합니다. 정해진 ~별 차이에 대해 분석하고싶다고 한다면 그 컬럼은 팩터화 될 수 있습니다.
Factor 형 변수에는 명목형 자료과 순서형 자료로 나뉩니다.
명목형 자료: 특징적인 순서가 없는 범주 (남,녀)
순서형 자료: 순서가 있는 범주, 정렬 가능 (상,중,하)
factor("표현하고자하는 값", c("범주1", "범주2")) # 명목형 자료
ordered("표현하고자하는 값", c("범주1", "범주2")) # 순서형 자료
첫 번째 인자는 팩터로 표현하고자하는 값, 두번째 인자는 c("범주1", "범주1") 라는 범주 내에서 사용 가능하다는 것을 알려주는 것입니다.
> Gender <- factor("m", c("m", "f"))
> Gender
[1] m
Levels: m f
nlvels(팩터형 변수) : 중복을 제거한 팩터의 레벨(범주) 개수 리턴(=Distinct Value)
levels(팩터형 변수) : 팩터의 레벨 목록 리턴
> nlevels(Gender)
[1] 2
> levels(Gender)
[1] "m" "f"
Factor 형 변수 생성 방법(명목형 자료)
# 1) 팩터를 선언하면서 데이터 삽입
> var1 <- factor('a', c('a','b','c')) # factor 형 scalar
> var1
[1] a
Levels: a b c
# 2) 변수에 먼저 데이터를 삽입한 후, 그 변수를 팩터형으로 선언
> var1 <- 'a'
> factor(var1, c('a','b','c'))
[1] a
Levels: a b c
# 3) 여러개의 데이터 값을 갖는 상태에서 팩터를 선언하면, 그 안의 데이터 범주를 카테고리로 판단
> var1 <- c('남','여','여','남')
> var1 <- factor(var1) # 정해진 값 내에서의 카테고리 범주가 레벨이 됨
> var1
[1] 남 여 여 남
Levels: 남 여
> var1 <- factor('a', c('a','b','c'))
> var1
[1] a
Levels: a b c
# 레벨 수정을 통해 정해진 값들을 수정할 수 있음
> levels(var1) <- c('A','B','C') # 먼저 삽인된 데이터가 범주에 포함되지 않으므로, 범주형으로 데이터가 수정됩니다
[1] A
Levels: A B C
> var2 <- 'a'
> var2
[1] "a"
# factor 여부 확인
> is.factor(var1)
[1] TRUE
> is.factor(var2) # var2 변수는 factor 형 선언을 하지 않았으므로 FALSE 리턴
[1] FALSE
> var1 <- factor(c('a', 'c'), c('a','b','c'))
> var1
[1] a c
Levels: a b c
# factor 변수 var1의 level 확인
> levels(var1)
[1] "a" "b" "c"
> levels(var1)[2] # 두 번째 레벨의 값 확인
[1] "b"
# factor 변수의 level 수정
> levels(var1) <- c("aaa","bbb","ccc") # 여러 값을 넣기 위해 무조건 벡터 c() 를 사용
> var1 # 레벨 안에서 정의가 되어야하므로 원래 저장된 값 자체도 수정이 되어버림(내용 덮어쓰기)
[1] aaa ccc
Levels: aaa bbb ccc
Factor 형 변수 생성 방법(명목형 자료)
# 팩터의 레벨을 지정해주는 이유는 팩터의 레벨 순서를 지정해주기 위함입니다.
> factor(c("대","소","대","중"), c("소","중", "대"))
[1] 대 소 대 중
Levels: 소 중 대
# 팩터를 지정하지 않을 경우, '가나다', '알파벳', '숫자' 순으로 레벨이 지정됩니다.
> factor(c("대","소","대","중"))
[1] 대 소 대 중
Levels: 대 소 중
# 여기서 ordered 함수를 사용하면 순서형 팩터를 생성할 수 있습니다.
> ordered(c("대","소","대","중"), c("소","중", "대"))
[1] 대 소 대 중
Levels: 소 < 중 < 대
관련 참고 글
[R] 리스트(list) <- Key-value 형태로 저장되는 데이터 구조
[R] 행렬(Matrix) <- 행과 열의 구조를 갖는 2차원 배열 구조
[R] 배열(Array) <- 동일한 데이터 타입으로 구성된 다차원 데이터구조
[R] 데이터 프레임(Date Frame) <- 엑셀 시트와 유사한 표 형태를 가진 데이터 구조
참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성
'R > Process' 카테고리의 다른 글
[R] 날짜와 시간 - as.Date, lubridate (0) | 2018.12.24 |
---|---|
[R] 진리값, 진리값의 연산자 (0) | 2018.12.24 |
[R] 벡터(vector) (0) | 2018.12.24 |
[R] 변수 - 변수 생성, 데이터 할당, 데이터 타입, 함수, 변수 확인, 삭제 (0) | 2018.12.24 |
[R] 스칼라(scalar) + NA, NULL (0) | 2018.12.22 |