3. 데이터 가공 > 3-1. 베이스 R로 가공하기

베이스 R로 가공하기


🧭 목차

  1. 데이터 살펴보기
  2. 샘플(행)과 속성(열) 추출
  3. 행/열 단위 연산

데이터 가공이란 효과적인 분석을 위해 데이터를 만지고 변형하는 작업을 말합니다. 데이터 정제와의 차이점은 좀 더 구체적인 목적 하에 광범위한 작업이 이루어진다는 것입니다.

이번 장에서는 데이터 가공에 사용되는 기본적인 R(베이스 R) 명령어를 학습해 보겠습니다.

1) 데이터 살펴보기

학습에 사용할 데이터셋은 'gapminder 라이브러리'입니다.

gapminder 라이브러리는 세계 각국의 기대 수명(lifeExp), 1인당 국내총생산(gdpPercap), 인구(pop) 데이터 등을 집계해놓은 gapminder 데이터셋의 일부를 담고 있습니다. 해당 데이터 프레임의 구성은 다음과 같습니다.

열 이름(변수명)변수형내용
country142개 레벨의 범주형국가명
continent5개 레벨의 범주형국가가 속한 대륙
yearint관측연도(1952~2007년 / 5년 단위)
lifeExpnum기대수명(평균수명)
popint인구수
gdpPercapnum1인당 국내총생산(물가 상승률 고려)
  • 출처: 양윤석, 오일석, 강래형, 『R로 배우는 데이터 과학』, 한빛미디어(2019), 150

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

# 데이터 살펴보기
View(gapminder)      # 데이터셋을 직접적으로 보여줌
glimpse(gapminder)   # 데이터셋 살펴보기

💡 str()glimpse()의 차이점


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

  • 데이터명[ , c(열1, 열2, ...)]

    gapminder 데이터에서 각 나라의 인구수를 확인해 보겠습니다.

    gapminder[ , c('country', 'pop')]
    

    gapminder는 5년 단위로 데이터를 기록하기 때문에, 한 국가의 인구수가 여러 개 출력됩니다. 이런 경우 관측연도를 함께 출력하는 것이 데이터를 파악하기에 좋습니다.

    gapminder[ , c('country', 'pop', 'year')]
    
  • 데이터명[행 번호:행 번호, ]

    행 번호를 통해 샘플을 추출할 수 있습니다.

    gapminder[8:18, ]
    

    그러나 위 방법은 추천하지 않습니다. 명령어의 의미를 파악하기 어렵고, 가공 과정에서 데이터의 정렬 순서가 바뀌는 경우 원하지 않는 샘플이 추출될 수 있기 때문입니다.

  • 데이터명[데이터명$열 속성 == '원하는 조건', ]

    따라서 행 번호 보다는 조건식을 이용하는 것을 추천합니다. 조건식을 사용해 아시아 대륙의 데이터를 추출해보겠습니다.

    # 행 조건
    gapminder[gapminder$continent == 'Asia', ]
    
    # 열 조건 추가
    # (1) 인구 속성 추출
    gapminder[gapminder$continent == 'Asia', 'pop']   # tibble 형식으로 출력
    gapminder$pop[gapminder$continent == 'Asia']      # 벡터 형식으로 출력
    
    # (2) 인구, 관측연도 속성 추출
    gapminder[gapminder$continent == 'Asia', c('pop', 'year')]
    

    보다 정교한 추출을 원하는 경우, 조건식을 논리연산자로 결합하면 됩니다.

    # 조건: 1990년도 이후 한국 + 인구수, 기대수명
    gapminder[gapminder$country == 'Korea, Dem. Rep.' & gapminder$year > 1990, c('pop', 'lifeExp')]
    

3) 행/열 단위 연산

데이터들의 요약 통계 혹은 행/열 단위의 연산이 필요한 경우, R에서 제공하는 apply 함수를 활용하면 됩니다.

  • apply(데이터, 연산방향, 적용함수)

    • 1: 행 방향으로 연산
    • 2: 열 방향으로 연산
    # 인구수 및 기대수명 평균 구하기
    apply(gapminder[gapminder$country == 'Korea, Dem. Rep.', c('pop', 'lifeExp')], 2, mean)
    
마지막으로 업데이트 된 날짜:
2022년 9월 24일