본문 바로가기

데이터 다루기/Base of R

[R] grep, grepl, gsub, strsplit, substr 함수 (문자열 다루기)

728x90
반응형

안녕하세요, 이번 포스팅에서는 문자열을 다루는 함수에 대해서 알아보도록 하겠습니다. 최근에 텍스트마이닝에 대한 중요성이 강조되고 있기 때문에 텍스트 데이터를 다루는 일이 많아졌습니다. 텍스트를 다루는데에 유용하고, 자주 사용되는 함수를 알려드리도록 하겠습니다.

우선 함수들에 대해 알아보기에 앞서 텍스트의 패턴을 찾을 때 사용되는 정규 표현식을 알려드리도록 하겠습니다.

[:digit:] 혹은 \d : 숫자, 0,1,2,3,4,5,6,7,8,9, 동등한 표현 [0-9].

\D : 숫자가 아님, 동등한 표현 [^0-9].

[:lower:] : 영문 소문자, 동등한 표현 [a-z].

[:upper:] : 영문 대문자, 동등한 표현 [A-Z].

[:alpha:] : 알파벳 대소문자, 동등한 표현 [[:lower:][:upper:]] 혹은 [A-z]

[:alnum:] : 알파벳 숫자 문자, 동등한 표현 [[:alpha:][:digit:]] 혹은 [A-z0-9].

\w : 단어 문자, 동등한 표현 [[:alnum:]] 혹은 [A-z0-9].

\W : 단어가 아닌 것, 동등한 표현 [^A-z0-9].

[:xdigit:] : 16진수 (밑이 16), 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f, 동등한 표현 [0-9A-Fa-f].

[:blank:] : 간격 문자, 즉 스페이스와 탭.

[:space:] : 공백 문자: 탭, 개행문자, 수직탭, 공백, 복귀문자, 서식이송(form feed)

\s : 간격, ` `.

\S : 간격 아님.

[:punct:] : 구두점 문자, ! " # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~.

[:graph:] : 그래픽 (사람이 읽을 수 있는) 문자, 동등한 표현 [[:alnum:][:punct:]].

[:print:] : 출력가능한 문자, 동등한 표현 [[:alnum:][:punct:]\\s].

[:cntrl:] : \n, \r 같은 제어문자, 동등한 표현 [\x00-\x1F\x7F].

① grep, grepl

grep

grep(pattern, x, ignore.case = F, value = F)

grepl

grepl(pattern, x, ignore.case = F)

grep 함수와 grepl 함수는 x라는 문자열에서 해당 패턴이 존재하는가를 알아보는 함수입니다. ignore.case = T 로 바꿀 경우, 해당 패턴에 대하여 대소문자 구분없이 존재하는가를 알려줍니다. grep 함수는 index를 출력하지만, grepl은 TRUE, FLASE를 출력합니다. 이 때, grep 함수에서 value = T 로 바꿔주면 index가 아닌 문자열이 출력됩니다.

txt <- c("BigData", "Bigdata", "bigdata", "Data", "dataMining", "class1", "class5") 
grep("data", txt) 
[1] 2 3 5 

grep("data", txt, ignore.case = T) 
[1] 1 2 3 4 5 

grep("data", txt, value = T) 
[1] "Bigdata" "bigdata" "dataMining" 

grep("^b+",txt, value=TRUE) 
[1] "bigdata" 

grepl("data", txt) 
[1] FALSE TRUE TRUE FALSE TRUE FALSE FALSE

위의 예시를 보시면, grep 함수를 통해 data가 들어간 문자열의 위치인 2,3,5가 출력되며, ignore.case = T를 추가할 경우, 대소문자 구분없이 data가 들어간 문자열의 위치인 1,2,3,4,5 가 출력되게 됩니다. 또한 value = T 를 추가할 경우, 위치가 아닌 문자열이 출력됩니다. 또한 정규표현식을 통해 b로시작하는 단어인 'bigdata'만 출력되는 것을 확인할 수 있습니다. 마지막으로 grepl은 위치가 아니라 TRUE와 FALSE 값으로 출력이 됩니다.

② gsub

gsub

gsub(pattern, replacement, x, ignore.case = F)

gsub 함수는 해당 패턴을 가지는 문자열을 x에서 발견하여, replacement로 바꿔주는 함수입니다. ignore.case 의 기능은 grep 함수와 같다고 생각하시면 됩니다.

gsub("big","small", txt, ignore.case = T) 
[1] "smallData" "smalldata" "smalldata" "Data" "dataMining" "class1" "class5" 

gsub("[[:digit:]]","", txt) 
[1] "BigData" "Bigdata" "bigdata" "Data" "dataMining" "class" "class"

위의 예시를 보시면, txt에 대소문자 상관없이 존재하는 big이 small로 변한것을 확인 할 수 있습니다.

또한, 이에 대한 활용으로 정규표현식을 통해 모든 숫자들을 없앨 수 있습니다.

③ strsplit, substr

strsplit

strsplit(x, split)

substr

substr(x, start, stop)

strsplit 함수는 문자열을 쪼개는 함수이며, substr 함수는 문자열에서 시작위치과 끝위치을 정하여 추출해내는 함수입니다.

test = "Text data is very important" strsplit(test, ' ') 
[[1]] 
[1] "Text" "data" "is" "very" "important" 

substr("abcdef", 2, 4) 
[1] "bcd"

위의 예시를 보시면, strsplit 함수를 이용하여 뛰어쓰기를 기준으로 test 문자열이 쪼개지는 것을 확인 할 수 있습니다.

또한, substr 함수에 시작위치와 끝위치를 인자로 주어, 2번째부터 4번째까지의 문자열이 출력됩니다.

반응형

'데이터 다루기 > Base of R' 카테고리의 다른 글

[R] dplyr 패키지로 데이터 전처리하기  (0) 2019.08.27
[R] 패키지 설치하기  (0) 2019.08.15
[R] with, within, which 함수  (0) 2019.05.30
[R] apply 함수  (0) 2019.05.30
R에서의 데이터 프레임 다루기 (2)  (0) 2019.05.29