R로 데이터 다루기

R에서 dplyr을 이용해 데이터를 추출, 가공하는 방법을 알아봅니다


수강중

8. 변수 이름 바꾸기 및 새로운 변수 추가하기(mutate)

dplyr 실행

library(dplyr)
Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

데이터 불러오기

sales <- read.csv('sales.csv', stringsAsFactors = F,
                  fileEncoding = 'UTF-8')

colnames

colnames로 변수 이름 확인한다. "시", "구", "성별", "점포명", "점포코드", "연월일", "판매건수" 7개의 columns을 확인 할 수 있다.

colnames(sales)
[1] "시"       "구"       "성별"     "점포명"   "점포코드" "연월일"   "판매건수"

변수명 한글을 영어로 변경

dplyr뿐 아니라 r 전반적으로 데이터에 한글 변수가 있으면 특정 함수에서 오류가 나는 경우가 있다. 따라서 어떤 오류가 발생할 지 모르기 때문에 변수 이름은 영어로 바꿔두는 것이 좋다.

colnames(sales) <- c('city', 'district', 'gender', 'sales.nm', 'sales.cd', 'ynd', 'sales.num')

변수명 오타 수정

변수가 몇번째 columns인지 확인하고 그 숫자에 해당하는 변수의 이름을 대입한다.

colnames(sales)[6]<-'ymd'

변수명 여러 개를 바꿔주는 경우, 해당하는 변수의 위치를 c를 사용해서 변경하면 된다.

colnames(sales)[c(6,7)] <- c('ymd', 'sales.num')

colnames를 변경할 때 유의점

colnames를 변경할 때 colum의 위치의 갯수와 입력하는 변수의 갯수가 일치해야한다.

head

headsales의 1:6 행의 데이터를 확인한다.

sales %>% head
  city       district gender sales.nm sales.cd ymd      sales.num
1 서울특별시 강남구   남     스탑버스 12AA02   20140101 103      
2 서울특별시 강남구   여     키즈랜드 100101   20140101 309      
3 서울특별시 강남구   여     키즈랜드 100101   20140101 365      
4 서울특별시 강남구   남     스탑버스 12AA02   20140101 421      
5 서울특별시 강남구   여     스탑버스 12AA02   20140101 413      
6 서울특별시 강남구   남     키즈랜드 100101   20140101 428      

city 변수 조작

mutate

새로운 변수를 만들거나 동일한 변수에 저장할 때는 dplyr의 mutate를 사용한다.

substr

substr을 사용해서 첫 번째와 두 번째 글자만 뽑는다. substr(city,1,2)결과 city서울특별시에서 서울이 출력된다.

sales <- sales %>% mutate(city = substr(city,1,2))

slice

head 대신 slice를 사용해서 첫 번째, 두 번째 행 데이터를 확인한다.

sales %>% slice(1:2)
  city district gender sales.nm sales.cd ymd      sales.num
1 서울 강남구   남     스탑버스 12AA02   20140101 103      
2 서울 강남구   여     키즈랜드 100101   20140101 309      

ymd 변수 조작

기본 r 기능 사용

substr 를 사용하여 ymd의 연부분을 잘라 새로만든 y변수에 넣는다

sales$y <- substr(sales$ymd, 1, 4)

다시 substr 을 사용해서 ymd의 월 부분을 잘라 새로만든 m변수에 넣는다

sales$m <- substr(sales$ymd, 5, 6)

다시 substr 을 사용해서 ymd의 일 부분을 잘라 새로만든 d변수에 넣는다

sales$d <- substr(sales$ymd, 7, 8)

dplyr 사용

장점

  • r 기본 함수를 사용하면 한 줄씩 계속 써야하고, sales 이라는곳에 항상 저장해야한다.
  • dplyr 를 사용하면 훨씬 쉽게 사용할 수 있다.
  • 한 줄씩 실행하는게 아니라 연속적으로 생성할 것을 준 다음에 한번에 처리할 수 있기 때문에 속도도 향상된다.

이전에 사용한 mutate을 사용한다. r 기본함수에서는 데이터에서 변수가 뭔지 직접 넘겨줘야되는데, dplyr 에서는 데이터 %>% 이어서 ymd 라고 쓰면 데이터의 변수 ymd 라고 인식을 한다.

업종 코드 변수 조작

sales 코드를 보면 6자리로 되어있다. 점포명마다 하나씩 코드가 있다. 업종 코드에서 6자리 중에 앞의 4글자만 잘라서 코드를 만든다.

이전과 같게 mutate에서 substr로 앞의 4자리만 자른후 새로 만든 products.cd에 저장한다.

sales <- sales %>% mutate(y = substr(ymd, 1, 4),
                          m = substr(ymd, 5, 6),
                          d = substr(ymd, 7, 8),
                          products.cd = substr(sales.cd, 1, 4))

slice(1:2)를 이용해 새로 생성한 변수 y,m,dproduct.cd가 잘 조작되었는 지 확인한다.

sales %>% slice(1:2)
  city district gender sales.nm sales.cd ymd      sales.num y    m  d 
1 서울 강남구   남     스탑버스 12AA02   20140101 103       2014 01 01
2 서울 강남구   여     키즈랜드 100101   20140101 309       2014 01 01
  products.cd
1 12AA       
2 1001       

ym 변수 생성

paste0

substr의 반대인 pastepaste0를 사용한다. paste0을 이용해서 ym을 사이에 공백이 없게 붙여 새로운 변수 ym에 넣어준다.

sales <- sales %>% mutate(ym = paste0(y,m))

slice(1:2)를 이용해 새로 생성한 변수 ym이 잘 조작되었는 지 확인한다.

sales %>% slice(1:2)
  city district gender sales.nm sales.cd ymd      sales.num y    m  d 
1 서울 강남구   남     스탑버스 12AA02   20140101 103       2014 01 01
2 서울 강남구   여     키즈랜드 100101   20140101 309       2014 01 01
  products.cd ym    
1 12AA        201401
2 1001        201401

select 이용

select를 통해 ym변수만 선택하여 table을 만든다.

sales %>% select(ym) %>% table
.
201401 201402 201403 201404 201405 201406 201407 201408 201409 201410 201411 
 22365  20220  22297  21474  22304  21567  22310  22379  21660  22307  21682 
201412 
 22235