3. 데이터 가공 > 3-1. 베이스 R로 가공하기
베이스 R로 가공하기
데이터 가공이란 효과적인 분석을 위해 데이터를 만지고 변형하는 작업을 말합니다. 데이터 정제와의 차이점은 좀 더 구체적인 목적 하에 광범위한 작업이 이루어진다는 것입니다.
이번 장에서는 데이터 가공에 사용되는 기본적인 R(베이스 R) 명령어를 학습해 보겠습니다.
학습에 사용할 데이터셋은 'gapminder 라이브러리'입니다.
gapminder 라이브러리는 세계 각국의 기대 수명(lifeExp), 1인당 국내총생산(gdpPercap), 인구(pop) 데이터 등을 집계해놓은 gapminder 데이터셋의 일부를 담고 있습니다. 해당 데이터 프레임의 구성은 다음과 같습니다.
열 이름(변수명) | 변수형 | 내용 |
---|---|---|
country | 142개 레벨의 범주형 | 국가명 |
continent | 5개 레벨의 범주형 | 국가가 속한 대륙 |
year | int | 관측연도(1952~2007년 / 5년 단위) |
lifeExp | num | 기대수명(평균수명) |
pop | int | 인구수 |
gdpPercap | num | 1인당 국내총생산(물가 상승률 고려) |
install.packages('gapminder') # 라이브러리 설치
library(gapminder) # 라이브러리 로딩
# 데이터 살펴보기
View(gapminder) # 데이터셋을 직접적으로 보여줌
glimpse(gapminder) # 데이터셋 살펴보기
💡 str()
과 glimpse()
의 차이점
데이터명[ , 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')]
데이터들의 요약 통계 혹은 행/열 단위의 연산이 필요한 경우, R에서 제공하는 apply
함수를 활용하면 됩니다.
apply(데이터, 연산방향, 적용함수)
# 인구수 및 기대수명 평균 구하기
apply(gapminder[gapminder$country == 'Korea, Dem. Rep.', c('pop', 'lifeExp')], 2, mean)