[R데이터분석] 범주형 변수 다루기 (factor함수 활용)
이번 포스팅은 factor형 데이터 타입에 대해 자세히 알아보겠습니다.
R의 factor형은 범주화된 변수의 종류를 나타내기 위해 사용합니다.
범주형 자료란 변수를 특정 기준으로 배타적으로 나눌 수 있는 자료입니다.
예를 들면 다음과 같은 자료입니다.
성별(남/여), 학점(A/B/C/D/…), 지역(서울시/경기도/충청도/강원도/…)
R에서 범주형자료를 다룰 때는 문자형 자료와 잘 구별할 수 있어야 합니다.
미리 범주형인지 문자형인지 확인하고 적절하게 분석 목적에 맞게끔 변환시켜야 합니다.
이러한 과정들이 모두 데이터전처리의 일부입니다.
factor 함수 형태는 다음과 같습니다.
여기서 예제를 하나 보겠습니다.
데이터에는 카페 별 커피 가격이 나와있습니다.
이 때 오른쪽 테이블처럼 D업체의 아메리카노 가격을 추가하고 싶습니다.
먼저 데이터셋을 만듭니다.
data_test <- data.frame(name=c("A","B","C"),americano_cost = c(4800,4100,4300))
data_test
name americano_cost
1 A 4800
2 B 4100
3 C 4300
잘 만들어졌죠?
이제 D업체의 아메리카노가격을 데이터셋에 추가해봅시다.
하지만 그 전에 데이터셋의 구조를 확인합니다.
데이터셋의 구조는 str(데이터셋명) 이라는 함수를 써서 확인할 수 있습니다.
참고로 데이터셋 구조를 확인하는 것은 어떤 분석을 하든 상관없이 필수적으로 수행해야 합니다.
str(data_test)
'data.frame': 3 obs. of 2 variables:
$ name : Factor w/ 3 levels "A","B","C": 1 2 3
$ americano_cost: num 4800 4100 4300
결과를 보니 프랜차이즈명에 factor 형으로 설정되어 있네요. 추가적으로 levels(수준) 가 A,B,C 로 설정되어 있습니다.
이 상태에서는 D업체를 추가하지 못합니다.
data_test2 <- rbind(data_test,c("D",2700))
Warning in `[<-.factor`(`*tmp*`, ri, value = "D"): invalid factor level, NA
generated
유효하지 않은 범주형 변수 수준(invalid factor level)을 가진다고 나오네요.
data_test2
name americano_cost
1 A 4800
2 B 4100
3 C 4300
4 <NA> 2700
데이터를 보면 D가 아니라 NA(결측값)으로 입력이 되었네요. 먼저 levels(수준)을 A,B,C,D 로 설정해주어야 합니다.
다시 말해서, factor형 변수의 levels(수준)을 A,B,C에 D를 추가해야 합니다.
다음 코드를 통해 현재 설정되어 있는 범주형 변수의 수준을 확인합니다.
levels(데이터셋명$변수명) 를 쓰면 확인할 수 있습니다.
levels(data_test2$name)
[1] "A" "B" "C"
위 결과를 보니 D가 없네요.
그러면 여기에 D를 추가하겠습니다.
levels(data_test$name) <- c('A','B','C','D')
levels(data_test$name)
[1] "A" "B" "C" "D"
c(‘A’,‘B’,‘C’,‘D’) 는 벡터의 요소가 A,B,C,D 이고 왼쪽에 있는 범주형 변수의 levels(수준)에 할당하였습니다.
여기까지 작업을 마쳤다면 정상적으로 값이 추가될 수 있습니다.
data_test3 <- rbind(data_test,c("D",2700))
data_test3
name americano_cost
1 A 4800
2 B 4100
3 C 4300
4 D 2700
결과에서 D업체의 아메리카노 가격이 정상적으로 추가되었네요.
그러면~! 이제 반대로 카페 범주에서 A업체를 제거해보겠습니다.
data_test4 <- data_test3
data_test4$name<- factor(data_test3$name,levels = c('B','C','D'))
data_test4
name americano_cost
1 <NA> 4800
2 B 4100
3 C 4300
4 D 2700
위 결과를 보면 A업체가 없어진 걸 볼 수 있습니다.
이해 안가는 부분이 있으면 댓글로 남겨주시고 공감 꾹 눌러주세요^^
'데이터 분석 > R 데이터 처리 & 분석' 카테고리의 다른 글
[R데이터분석] dplyr 패키지를 활용한 데이터전처리(2) (group_by, summarise) (0) | 2020.01.31 |
---|---|
[R데이터분석] dplyr 패키지를 활용한 데이터전처리(1) (0) | 2020.01.29 |
[R 데이터분석] 조인(join) 을 이용하여 데이터 병합하기(inner join, full join, left join, right join) (2) | 2020.01.20 |
[R 데이터분석] transform 함수 이용하기(새로운변수 생성) (0) | 2020.01.18 |
[R] subset 함수로 데이터 추출하기 (4) | 2020.01.18 |