변수 조작하기
1. 변수명 바꾸기
데이터의 특징 파악 이후, 분석 시 변수를 기억하기 편하도록 변수명을 바꾸어 주는 작업을 해 주어야 합니다.
패키지 설치
변수명을 바꿀 때에는 R의 패키지인 dplyr
패키지 내의 rename()
함수를 사용합니다. 패키지를 설치하고 불러옵니다.
install.packages("dplyr")
library(dplyr)
데이터 프레임 복사본 만들기
이번에도 실습 데이터로 ggplot2
에 내장된 mpg
데이터를 사용하겠습니다. 데이터 분석을 하기 위해 변수를 가공해야 할 때는 원본 데이터를 직접 사용하는 것 보다는 언제든 원본으로 되돌릴 수 있도록 복사본을 만들어 사용하는 습관을 들이는 것이 좋습니다.
mpg_raw <- ggplot2::mpg
mpg_new <- mpg_raw
변수명 바꾸기
복사본을 생성한 후 rename()
을 사용하여 변수명을 바꿔보겠습니다. mpg 데이터의 hwy
변수는 고속도로 연비를 나타내는 변수 입니다. 이 변수를 highway
라는 변수명으로 바꾸어 보겠습니다. 또한 cty
변수는 도시 연비를 나타내는 변수 입니다. 이 변수를 city
라는 변수명으로 바꾸어 보겠습니다.
mpg_new <- rename(mpg_new, highway = hwy)
mpg_new <- rename(mpg_new, city = cty)
head(mpg_new)
# A tibble: 6 x 11
# manufacturer model displ year cyl trans drv city highway fl class
# <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
# 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
# 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
# 3 audi a4 2 2008 4 manual(m6) f 20 31 p compact
# 4 audi a4 2 2008 4 auto(av) f 21 30 p compact
# 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
# 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact
2. 파생변수 만들기
데이터에 들어 있는 변수만 이용하여 분석할 수도 있지만 변수를 조합하여 새 변수를 만들고 이 변수들을 분석하는 경우도 많습니다. 또한 연속형 변수를 범주형의 형태로 바꾸어 범주형에서 사용되는 빈도분석 등의 분석 기법을 적용할 수도 있습니다. 이번에도 mpg 데이터를 그대로 사용 하여 진행하겠습니다.
mpg 데이터 내에는 2개의 연비 변수가 있었습니다. 도시 연비를 나타내는 cty 변수와 고속도로 연비를 나타내는 hwy 변수 입니다. 전의 실습에서 cty는 city로, hwy는 highway로 이름을 바꾸었습니다. 이 두 변수의 평균을 내어 통합 연비 변수를 추가하여 보겠습니다.
mpg_new$total <- (mpg_new$city + mpg_new$highhway)/2
head(mpg_new)
# A tibble: 6 x 12
# manufacturer model displ year cyl trans drv city highway fl class total
# <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr> <dbl>
# 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact 23.5
# 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact 25
# 3 audi a4 2 2008 4 manual(m6) f 20 31 p compact 25.5
# 4 audi a4 2 2008 4 auto(av) f 21 30 p compact 25.5
# 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact 21
# 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact 22
추가된 변수의 평균을 구해보겠습니다.
mpg_avg <- mean(mpg_new$total)
mpg_avg
# [1] 20.14957
조건문을 사용하여 파생변수 만들기
변수를 조합한 파생변수를 만들 수도 있지만 조건에 따라서 각기 다른 값을 반환시켜 주는 조건문 함수를 이용하여 파생 변수를 만들 수도 있습니다. 이 작업은 연속형 변수의 범주화 작업이라고 말할 수 있습니다. 연속형 변수를 일정한 기준에 따라 범주화 함으로써 범주형 변수에서 사용할 수 있는 빈도 분석등의 기법을 적용할 수 있게 됩니다.
여기서 주의해야 할 점은 기준값을 정할 때 데이터를 나누는 기준이 합당해야만 하다는 점을 염두에 두고 작업해야만 합니다.
R에서의 조건문 함수는 여러 종류가 있지만 가장 많이 사용되는 함수는 ifelse()
함수 입니다. 함수의 원형을 살펴 보겠습니다.
ifelse(test, yes, no)
여기서 test에는 조건이 위치합니다. 조건이 참(T) 일때는 yes 위치의 값이 return 되고, 조건이 거짓(F) 일때는 no 위치의 값이 return 됩니다.
작업해 놓았던 mpg 데이터로 계속 이어서 실습 하겠습니다. mpg 데이터의 total 연비 변수를 만들었고, 이것의 평균을 구해 보았습니다. 여기서 total 값이 평균값 이상일 때 pass, 평균 이하일 때 fail을 부여하여 보겠습니다.
mpg_new$test <- ifelse(mpg_new$total >= mpg_avg , "pass", "fail")
head(mpg_new)
# A tibble: 6 x 13
# manufacturer model displ year cyl trans drv city highway fl class total test
# <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr> <dbl> <chr>
# 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact 23.5 pass
# 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact 25 pass
# 3 audi a4 2 2008 4 manual(m6) f 20 31 p compact 25.5 pass
# 4 audi a4 2 2008 4 auto(av) f 21 30 p compact 25.5 pass
# 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact 21 pass
# 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact 22 pass
중첩 조건문 사용하기
3 개 이상의 등급으로 표시하고 싶을 때에는 ifelse()
안에 ifelse()
를 중첩할 수 있습니다.
mpg_new$test <- ifelse(mpg_new$total >= mpg_avg , "A",
ifelse(mpg_new$total >= 15 , "B", "C"))
이때 ifelse 문은 괄호가 닫힐 때까지 유효하기 때문에 보기 좋게 개행을 이용해서 정리해 줄 수도 있습니다.
Source code
https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/var_Manu
// 참고자료
김영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019
이영호, "확률과통계" 가천대학교, 2019.03.21