Programming/R

변수 조작하기

Ark1st 2019. 4. 10. 02:15

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