3. 데이터 가공 > 3-2. dplyr 라이브러리로 가공하기

dplyr 라이브러리로 가공하기


🧭 목차

  1. 샘플(행)과 속성(열) 추출
  2. 행/열 단위 연산
  3. %>%(파이프) 연산자를 이용한 연속 처리

이번 장에서는 'dplyr 라이브러리'에 대해 배워보겠습니다.

dplyr 라이브러리는 데이터 가공에 특화된 라이브러리로, R 데이터 전처리 및 가공에 가장 많이 사용됩니다. 베이스 R과 달리 filter(), select() 등의 함수를 통해 데이터 가공을 구현하여, 작업 과정을 보다 직관적으로 이해할 수 있습니다.

install.packages('dplyr')   # 라이브러리 설치
library(dplyr)              # 라이브러리 로딩

library(gapminder)

1) 샘플(행)과 속성(열) 추출

  • filter(데이터, 조건식)

    • 특정 샘플(행)이 추출된다.
    filter(gapminder, continent == 'Asia')
    filter(gapminder, continent == 'Asia' & year > 2000)
    
  • select(데이터, 추출할 열 이름/식)

    • 특정 속성(열)이 추출된다.
    • 베이스 R과 달리, 열 이름 입력 시 따옴표가 필요 없다.
    select(gapminder, country, pop, year)      # dplyr 라이브러리
    gapminder[, c('country', 'pop', 'year')]   # 베이스 R
    
    # 특정 속성(열)을 제외하고 싶은 경우
    select(gapminder, !c(continent, lifeExp, gdpPercap))   # 벡터 안의 열 제외
    

2) 행/열 단위의 연산

  • summarise(데이터, 요약 통계함수)

    summarise(gapminder, mean(pop))   # 인구수 평균
    
    # 변수에 저장하여 추후 활용이 가능
    summarise(gapminder, pop_mean = mean(pop))   # 변수명: pop_mean
    

    📖 참고하기: 요약 통계함수 예시

    함수기능
    n()샘플(행) 개수
    max(속성) / min(속성)최대값 / 최소값
    sum(속성)합계
    mean(속성)평균
    quantile(속성)분위수

  • group_by(데이터, 속성)

    • 데이터 프레임 내 (범주형)속성을 활용해, 데이터를 그룹으로 분류한다.

    • 보통 summarise()와 함께 사용된다.

    # 전체 데이터를 대륙으로 분류한 뒤, 대륙별 인구수 평균 구하기
    summarise(group_by(gapminder, continent), pop_mean = mean(pop))
    
    # 복수의 속성으로 그룹화할 수 있음
    summarise(group_by(gapminder, continent, country), pop_mean = mean(pop))
    

3) %>%(파이프) 연산자를 이용한 연속 처리

효율적인 데이터 가공을 위해 dplyr 라이브러리에서 제공하는 연산자가 있습니다. 바로 %>%(파이프) 연산자입니다.

%>% 연산자는 앞의 명령어 처리 결과를 다음 명령어로 전달하여, 일련의 데이터 가공 작업을 연결해 줍니다.

  • %>% 연산자를 사용하지 않는 경우

    summarise(group_by(gapminder, continent, country), pop_mean = mean(pop))
    
  • %>% 연산자를 사용하는 경우

    gapminder %>% 
        group_by(continent, country) %>%
        summarise(pop_mean = mean(pop))
    

iris 데이터로 한 번 더 비교해 봅시다.

  • %>% 연산자를 사용하지 않는 경우

    tmp1 = filter(iris, Sepal.Length >= 5.5 & Petal.Length >= 3.5)
    tmp2 = select(tmp1, Sepal.Length, Petal.Length, Species)
    tmp3 = summarise(group_by(tmp2, Species),
                     s_avg = mean(Sepal.Length), p_avg = mean(Petal.Length))
    tmp3   # 결과 출력
    
  • %>% 연산자를 사용하는 경우

    iris %>%
      filter(Sepal.Length >= 5.5 & Petal.Length >= 3.5) %>%   # 행 추출
      select(Sepal.Length, Petal.Length, Species) %>%         # 열 추출
      group_by(Species) %>%
      summarise(s_avg = mean(Sepal.Length), p_avg = mean(Petal.Length))
    
마지막으로 업데이트 된 날짜:
2022년 9월 24일