본문 바로가기

R프로그래밍

[R프로그래밍] 팩터(Factor) 변수

< str 함수 >

데이터 프레임 형태의 변수를 요약해서 정보를 확인할 수 있는 함수이다.

데이터의 각 변수(Variable, Column)가 어떤 타입인지,

레코드(행)가 총 몇 개인지,  변수(열)은 몇개인지 확인할 수 있다.

 

# str - data.frame
names <- c("Min", "Jane", "Jone", "Soo", "Haein", "Yoon")
ages <- c(20, 23, 29, 30, 25, 23)
gender <- c("M", "F", "F", "F", "M", "M")

df <- data.frame(names, ages, gender)
df

str(df)

 

 

- str(df)의 결과로 6 obs. of 3 variables 를 확인할 수 있다.

- 변수는 3개이고 각 6개의 관측값이 있다는 의미이다. 

- 그리고 이어서 각 변수들에 대한 정보가 등장하는데 변수명 다음으로 나오는 정보가 변수의 타입이고, num(수치형), chr(문자형), factor(범주형) 등의 정보를 확인할 수 있다.

 

 

 

 

< 팩터형 변수 >

Factor(팩터 또는 요인) 변수는 범주형 데이터를 표현하기 위한 데이터 타입(Data type)이다.

범주형 데이터란, 통계학에서 데이터를 구분할 때 사용하는 개념인데

문자 데이터는 통계학에서 다루지 않는 영역이므로 데이터는 크게 (1) 범주형 데이터와 (2) 수치형 데이터로 나눠진다.

 

1) 범주형 변수는 성별(남자와 여자), 직급(사원, 주임, 대리, 과장, 차장, 부장), 혈액형(A, B, O, AB)과 같이 사전에 정해진 몇개의 범주로 분류되는 경우를 말한다. 그리고 팩터형 변수에서 사전에 정해진 이 범주를 levels(레벨값)이라고 부른다.

2) 수치형 변수는 나이, 키, 몸무게 등으로 세부적으로는 정수형과 실수형으로 나뉜다.

 

df <- data.frame(names = c("Min", "Jane", "Jone", "Soo", "Haein", "Yoon"),
                 ages = c(20, 23, 29, 30, 25, 23),
                 gender = c("M", "F", "F", "F", "M", "M")
)

df

str(df)

df$gender

 

 

팩터형 변수인 gender만 따로 호출(df$gender) 했을 때  데이터값과 levels값을 확인 할 수 있다.

데이터 값은 6개지만, levels값은 총 표현할 수 있는 범주가 M과 F 두개 이므로 두 개만 나타난다.

 

 

그런데 gender는 팩터변수가 맞지만 사실 names는 이름이지 범주형의 변수가 아닌데도 factor라고 되어있는 것을 확인 할 수 있다.

 

R은 통계분석을 목적으로 처음 개발되서, 모든 문자는 다 팩터형으로 인식하도록 설정되어있다.

 

그래서 데이터를 생성할 때나 외부에서 TXT, CSV 파일 등을 불러올 때

우선 stringAsfactor 인자를 False로 설정해준뒤

팩터형 변수들만 as.factor(변수명) 명령어를 통해서 범주형 변수로 타입을 바꿔주는 것이 실전 분석에서 용이하다.

 

df <- data.frame(names = c("Min", "Jane", "Jone", "Soo", "Haein", "Yoon"),
                 ages = c(20, 23, 29, 30, 25, 23),
                 gender = c("M", "F", "F", "F", "M", "M"), stringsAsFactors = F
)

str(df)

df$gender <- as.factor(df$gender)
str(df)

 

 

 

 

 

< 데이터 타입 변경 >

- as.factor(데이터프레임명$변수명)   : 팩터형으로 변경

- as.numeric(데이터프레임명$변수명)    : 수치형으로 변경

- as.character(데이터프레임명$변수명)    : 문자형으로 변경

 

df <- data.frame(company = c("apple", "samsung"),
                 product = c("iPhone", "galaxy"),
                 price = c("1300", "800"))

df
str(df)

df$product <- as.character(df$product)
df$price <- as.numeric(df$price)

str(df)