R로 데이터 다루기

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


수강중

10. 특정 문자가 포함된 데이터 추출하기 (SQL LIKE문)

예제 데이터 생성

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

data.frame을 이용해 예제 데이터를 만들어 x로 저장한다.

x <- data.frame(sales.nm = c('스탑버스', '야타버스', '스톱버튼'),
                sales.num = c(1,2,3))

grep

grep을 사용해 특정문자의 존재 여부를 01로 확인한다. 해당 문자가 들어있으면 1, 없으면 0이 나온다. grepl('스', '스스스')결과 1이 나온다.

grep('스', '스스스')
[1] 1

grep('스', '가가가') 결과 0이 나온다.

grep('스', '가가가')
integer(0)

grepl

grepl을 사용해 특정문자의 존재 여부 TRUEFALSE로 확인한다. 해당 문자가 들어있으면 TRUE, 없으면 FALSE이 나온다.

grepl('스', '스스스')
[1] TRUE
grepl('스', '가가가')
[1] FALSE

데이터에 적용

dplyr을 사용하기 위해 TRUE/FALSE를 반환하는 grepl을 사용한다. filtergrepl을 넣고 우리가 찾고자 하는 문자를 넣어주면, 문자 위치에 상관없이 해당 문자열의 존재여부만 확인해 데이터를 출력한다.

sales.nm가 포함되어 있는 데이터를 추출한다.

x %>% filter(grepl('스', sales.nm))
  sales.nm sales.num
1 스탑버스 1        
2 야타버스 2        
3 스톱버튼 3        

sales.nm버스가 포함되어 있는 데이터를 추출한다.

x %>% filter(grepl('버스', sales.nm))
  sales.nm sales.num
1 스탑버스 1        
2 야타버스 2        

sales.nm스탑이 포함되어 있는 데이터를 추출한다.

x %>% filter(grepl('스탑', sales.nm))
  sales.nm sales.num
1 스탑버스 1        

정규표현식

해당 문자로 시작하는 데이터 추출

^을 이용해 특정 문자열로 시작하는 데이터를 추출한다.

x %>% filter(grepl('^스', sales.nm))
  sales.nm sales.num
1 스탑버스 1        
2 스톱버튼 3        

해당 문자열로 끝나는 데이터 추출

$^을 이용해 특정 문자로 끝나는 데이터를 추출한다.

x %>% filter(grepl('스$', sales.nm))
  sales.nm sales.num
1 스탑버스 1        
2 야타버스 2        

판매 데이터를 이용한 실습

판매 데이터를 불러온다.

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

unique

unique를 사용해 점포명 컬럼에 들어있는 데이터를 확인한다.

sales %>% select(점포명) %>% unique
   점포명  
1  스탑버스
2  키즈랜드
7  레스탑  
8  원조한식
9  카페베타
12 원조백반
15 @       
16 전주비빔
37 베타문구

특정 키워드가 포함

sales.nm (점포명)에서 스탑이 포함된 데이터를 추출한다.

sales %>% filter(grepl('스탑', 점포명)) %>% head
  시         구     성별 점포명   점포코드 연월일   판매건수
1 서울특별시 강남구 남   스탑버스 12AA02   20140101 103     
2 서울특별시 강남구 남   스탑버스 12AA02   20140101 421     
3 서울특별시 강남구 여   스탑버스 12AA02   20140101 413     
4 서울특별시 강남구 여   레스탑   110001   20140101 287     
5 서울특별시 강남구 남   스탑버스 12AA02   20140101 267     
6 서울특별시 강남구 남   레스탑   110001   20140101  71     

특정 키워드로 시작

sales.nm (점포명)에서 스탑으로 시작하는 데이터를 추출한다.

sales %>% filter(grepl('^스탑', 점포명)) %>% head
  시         구     성별 점포명   점포코드 연월일   판매건수
1 서울특별시 강남구 남   스탑버스 12AA02   20140101 103     
2 서울특별시 강남구 남   스탑버스 12AA02   20140101 421     
3 서울특별시 강남구 여   스탑버스 12AA02   20140101 413     
4 서울특별시 강남구 남   스탑버스 12AA02   20140101 267     
5 서울특별시 강남구 여   스탑버스 12AA02   20140101 348     
6 서울특별시 강남구 남   스탑버스 12AA02   20140101 348     

특정 키워드로 끝

sales.nm (점포명)에서 스탑으로 끝나는 데이터를 추출한다.

sales %>% filter(grepl('스탑$', 점포명)) %>% head
  시         구     성별 점포명 점포코드 연월일   판매건수
1 서울특별시 강남구 여   레스탑 110001   20140101 287     
2 서울특별시 강남구 남   레스탑 110001   20140101  71     
3 서울특별시 강남구 NA   레스탑 110001   20140101 149     
4 서울특별시 강남구 여   레스탑 110001   20140101 229     
5 서울특별시 강남구 여   레스탑 110001   20140101 450     
6 서울특별시 강남구 여   레스탑 110001   20140101 214