주어진 데이터를 원하는 형태로 변형하려면 R에서 제공하는 내장 함수들을 사용할 수도 있습니다. 그러나 R에서 제공하는 내장 함수보다 더 편리하게 데이터를 변형하기 위해서 dplyr 패키지를 사용합니다.

 

쉽게 배우는 R데이터 분석 에서는 자주 사용하는 8개의 함수를 제시하였습니다.

함수 기능
filter() 행 추출
select() 열(변수) 추출
arrange() 정렬
mutate() 변수 추가
summarise() 통계치 산출
group_by() 집단별로 나누기
left_join() 데이터 합치기 (열)
bind_rows() 데이터 합치기 (행)

 

dplyr 함수는 데이터 프레임 변수 뒤에 %>% 기호 (파이프 연산자) 를 사용해서 함수들을 연결하여 함수를 적용할 수 있습니다. %>% 기호는 R Studio 에서는 Ctrl + Shift + M 을 누르면 삽입할 수 있습니다.

Do it R에서 제공하는 csv_exam 파일을 활용하여 실습하여 보도록 하겠습니다.

library(dplyr)
exam <- read.csv("csv_exam.csv") 

 

1. 조건에 맞는 데이터 추출하기 (행)

전에 배웠던 ifelse로도 같은 역할을 할 수 있습니다. 그러나 dplyr의 filter() 함수를 사용하면 더 간편하게 원하는 데이터를 추출해 낼 수 있습니다.

1반의 학생들의 데이터만 추출해 보겠습니다.

exam %>% filter(class == 1)

 

2반이 아닌 학생들의 데이터를 추출하려면 같지 않다!= 기호를 사용하여 추출할 수 있습니다.

exam %>% filter(class != 2)

 

초과, 미만, 이상, 이하도 동일하게 기호를 사용하면 됩니다. 영어 점수가 60점 이상인 경우만을 추출해 보겠습니다.

exam %>% filter(english >= 60)

 

여러 조건을 동시에 충족하게 하려면 그리고를 의미하는 논리 연산자 & 를 사용하면 됩니다.

exam %>% filter(english >= 60 & math >= 60)

 

여러 조건 중 하나를 충족하게 하려면 또는을 의미하는 | 기호를 사용하면 됩니다.

exam %>% filter(english >= 60 | math >= 60)

 

매치 연산자 %in% 을 사용하여 변수의 값이 지정된 조건에 해당되는지 한번에 확인할 수도 있습니다.

1, 3, 5반만 추출

exam %>% filter(class %in% c(1,3,5))

 

추출한 행으로 데이터를 만들수도 있습니다.

higher_60 <- exam %>% filter(english >= 60 | math >= 60)

 

2. 필요한 변수만 추출하기 (열)

dplyr 함수의 select() 함수는 필요한 열을 추출할 수 있습니다.

exam %>% select(math) # math 열만 추출

 

여러 열을 추출하려면 ,를 활용하여 변수명을 나열하면 됩니다.

exam %>% select(math,english)

 

변수를 제외하려면 빼기 기호 - 를 사용하면 됩니다.

exam %>% select(-math) #math 열 제외하고

 

3. 함수 조합하기

dplyr 함수는 파이프 연산자 %>% 를 이용해 조합할 수 있습니다.

exam %>% 
   filter(class == 1) %>% 
   select(math)

 

4. 정렬하기

arrange()를 이용하여 데이터를 원하는 순서로 정렬할 수있습니다.

1) 오름차순으로 정리하기

arrange() 에 기준으로 삼을 변수를 입력하면 오름차순으로 정렬됩니다.

exam %>% arrange(math)

 

2) 내림차순으로 정리하기

arrange() 함수 내에 desc() 함수를 적용하면 내림차순으로 정렬할 수 있습니다.

exam %>% arrange(desc(math))

 

5. 파생변수 추가하기

mutate() 함수를 사용하면 기존 데이터에 파생변수를 보다 더 쉽게 만들 수 있습니다.

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

 

mutate()에서도 ifelse()를 적용하여 연속형 변수를 범주화 할 수 있습니다.

exam %>% 
  mutate(test = ifelse(science >= 60, "p", "f"))

 

6. 집단별로 요약 통계량 내기

group_by() 와 summarise()를 사용하면 집단별로 요약 통계량을 파악할 수 있습니다.

exam %>% 
    group_by(class) %>%    #class 로 나누기
    summarise(mean_math = mean(math))    #class 별 평균

summarise() 함수 안에는 연속형 변수만 들어갈 수 있습니다.

 

7. 데이터 합치기

1) 열 데이터 합치기

left_join()을 사용하면 데이터의 행을 합칠 수 있습니다. 변수를 추가한다고 볼 수 있습니다. by = 파라미터에서 기준으로 삼을 변수명을 지정해 줄 수 있습니다.

test1 <- data.frame(id = c(1,2,3,4,5),
                    midterm = c(60,80,70,90,85))

test2 <- data.frame(id = c(1,2,3,4,5),
                    final = c(60,80,70,90,85))

total <- left_join(test1, test2, by = "id") #id를 기준으로 합친다.

 

2) 행 데이터 합치기

bind_rows()를 사용하여 행 데이터를 합칠 수 있습니다. 데이터의 양이 늘어난다고 볼 수 있습니다.

group_a <- data.frame(id = c(1,2,3,4,5),
                    test = c(60,80,70,90,85))

group_b <- data.frame(id = c(6,7,8,9,10),
                    test = c(70,83,65,95,80))

group_all <- bind_rows(group_a, group_b)

 

Source Code

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/data_Pretreatment

 

// 참고자료

김영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱,

2019 이영호, "확률과통계" 가천대학교, 2019.03.21

'Programming > R' 카테고리의 다른 글

그래프 만들기  (0) 2019.04.30
데이터 정제하기 (데이터 클린징)  (0) 2019.04.15
변수 조작하기  (0) 2019.04.10
데이터 파악하기  (0) 2019.04.09
외부 데이터로 데이터프레임 만들기  (0) 2019.03.30

+ Recent posts