brunch

You can make anything
by writing

C.S.Lewis

by 이지섭 Feb 02. 2021

R - mutate()함수로 간결하게 파생변수 만들기

mutate()함수를 이용하면 코드를 간결하게 짤 수 있다. 

파생변수를 추가할 때 쓰는 mutate함수(dplyr packages)

library(dplyr)

exam <- data.frame(class  = c(1, 1, 2, 2, 3, 3), 

                                    name = c("덕춘", "성길", "진웅", "건식", "우진", "재원"), 

                                    science = c(80, 60, 70, 90, 90, 40),

                                    math = c(100, 90, 50, 100, 60))

exam %>% 

  mutate(total = math + science) 

#math, science를 합쳐 total 변수 생성



내장함수로 파생변수를 만드는 것과 mutate를 사용하는 것의 차이는 무엇일까? 

직접 차이를 느껴보자. 

내장함수로 변수를 지정할 경우에는 

exam$total <- (exam$math  + exam$science)   


mutate로 변수를 지정할 때는 

exam %>% mutate(total = math + science)


데이터프레임$변수명을 입력할 필요가 없어 코드가 훨씬 간결해진다. 

  


mutate의 또다른 장점은 동시에 '여러개'의 파생변수를 추가할 수 있다는 것!

 

exam %>%

 mutate(total = math + science, 

 mean = (math + science)/2) 


ifelse 함수도 mutate안에 집어넣을 수 있다. 

exam %>% 

 mutate(test = ifelse(science >= 60, "pass", "fail")) 

# ifelse안에도 데이터프레임$변수명 이 아닌 그냥 변수명으로 입력했다. 



mutate는 dataframe 명을 일일이 입력하지 않아도 작동하며, assign하지 않아도 앞에서 만든 파생변수를 뒤에서 바로 활용할 수 있다. 코드가 길어질수록 mutate의 효과는 증대되는 것! 


exam %>%

 mutate(total = ifelse >= 60, "pass", "fail")) %>%

 arrange(total) 

total이라는 변수가 아직 exam에 assign되지는 않았는데, 바로 arrange로 정렬을 바꿨다. 

마치 이 데이터 안에 변수가 있는 것처럼 바로 데이터를 받아서 활용한 것. 



문제를 풀어보자! 


이전에 한 파생변수 예제 (mpg 데이터를 이용)를 똑같이 푸는데, mutate를 활용해 코딩해보자. 

mpg는 연비를 나타내는 변수가 hwy, cty 두 종류로 분리되어 있음. 두 변수를 활용하는 대신 하나의 통합 연비 변수를 만들어 분석하려 함. 


Q1. mpg데이터 복사본을 만들고, cty와 hwy를 더한 '합산 연비 변수'를 추가하시오. 



Q2. 앞에서 만든 '합산연비 변수'를 2로 나눠 '평균연비변수'를 추가하시오.

 


Q3. 평균연비변수가 가장 높은 자동차 3종의 데이터를 출력하세요 



Q4. 1-3번 문제를 해결할 수 있는 하나로 연결된 dplyr 구문을 만들어 출력하시오. 데이터는 복사본 대신 mpg원본을 이용하시오. 



답1. 

libary(ggplot2)

mpg <- as.data.frame(ggplot2::mpg)

mpg_new <- mpg

mpg_new <- mpg %>% 

                        mutate(total = cty + hwy)


답2. 

mpg_new <- mpg_new %>% 

                        mutate(mean = total/2)


답3. 

mpg_new %>%

 arrange(desc(mean))

 head(3)


답4.

mpg %>%

 mutate (total = cty + hwy, 

 mean = total/2) %>%

 arrange(desc(mean)) %>%

 head(3)


이제 우리는 파생변수를 활용하는 2가지 방법을 알게 됐다.  

1. assign해서 저장해놓고 사용하는 방법, 

2. 저장하지 않고 바로 연결해서 쓰는 방법. 

assign하지 않고 출력물을 바로 보는 식으로 하면 나중에 total이나 mean이라는 변수를 또 활용하기 어려울 수 있다. 만약 이후에 계속 사용할 것 같다면, mutate한 변수들을 모두 assign하도록 하자. 



※위 내용은 패스트캠퍼스 <프로젝트와 함께 배우는 R 데이터분석 올인원 패키지 Online>에서 공부한 내용을 토대로 데이터를 조금씩 변경해 작성했습니다. 



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari