특정 문자가 포함된 데이터 추출하기 (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을 사용해 특정문자의 존재 여부를 0과 1로 확인한다. 해당 문자가 들어있으면 1, 없으면 0이 나온다.
grepl('스', '스스스')결과 1이 나온다.
grep('스', '스스스')
[1] 1
grep('스', '가가가') 결과 0이 나온다.
grep('스', '가가가')
integer(0)
grepl
grepl을 사용해 특정문자의 존재 여부 TRUE와 FALSE로 확인한다. 해당 문자가 들어있으면 TRUE, 없으면 FALSE이 나온다.
grepl('스', '스스스')
[1] TRUE
grepl('스', '가가가')
[1] FALSE
데이터에 적용
dplyr을 사용하기 위해 TRUE/FALSE를 반환하는 grepl을 사용한다.
filter에 grepl을 넣고 우리가 찾고자 하는 문자를 넣어주면, 문자 위치에 상관없이 해당 문자열의 존재여부만 확인해 데이터를 출력한다.
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