[R] 문자열에서 패턴 검색하기 (feat. grep, grepl)

해당 포스트에서는 R에서 문자열 패턴 검색을 위한 grep(), grepl() 함수에 대해 소개합니다.

how-to-detect-text-in-string-using-r-grep-grepl

INTRO

R 프로그래밍에서 grepl()grep() 함수는 문자열 검색과 관련된 문제를 다룰 때 많이 사용되는 함수로, 특히, 정규 표현식을 활용하여 특정 문자열을 찾아내거나, 특정 패턴(pattern)을 가진 문자열을 필터링하는데 많이 사용되는 함수입니다.

아래에서는 각 함수에 대해 예시와 함께 설명합니다.

grep() vs. grepl()

먼저 grep()grepl() 함수 사용 방법에 대해 설명합니다.

grep() 함수

grep() 함수는 정규 표현식을 사용하여 문자열 벡터에서 특정 패턴을 가진 문자열의 위치를 찾아주거나 해당 값을 반환할 수 있습니다.

  • grep("apple", y) : y 벡터에서 "apple"이 존재하는 위치(인덱스)를 반환
  • grep("apple", y, value = TRUE) : y 벡터에서 "apple"이 포함된 값 반환

grepl() 함수

grepl() 함수는 정규 표현식을 사용하여 문자열 벡터에서 특정 패턴이 존재하는지 여부를 논리값으로 반환합니다.

  • grepl("apple", y) : y 벡터에 "apple"이 포함되어 있는지 여부에 대한 논리값 반환


이러한 함수들을 사용하기 위해서는 패턴이나 값을 찾을 대상인 벡터를 지정해줘야 합니다. 패턴은 정규 표현식으로 작성할 수 있으며, 값은 대소문자를 구분하거나 구분하지 않도록 설정할 수 있습니다. 이 함수들은 텍스트 분석, 데이터 정제, 검색 등 다양한 분야에서 활용됩니다.

예시 코드 설명

아래에서는 예시 코드와 함께 R에서 grepl()grep() 함수의 기본적인 활용 방법을 설명합니다.

먼저, 샘플 데이터인 문자열 벡터 xy를 생성하고, grepl() 함수를 사용하여 y벡터에서 x[1]에 해당하는 문자열 a를 검색해 보겠습니다. grepl() 함수는 결과를 논리값(TRUE or FALSE)으로 반환합니다.

grepl() 예시

x <- c("a","g","o","y")
y <- c("apple","banana","graph","orange","peach","cherry")

grepl(pattern = x[1], x = y)
[1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE

위 결과를 보면, grepl() 함수 출력 결과로 y벡터에서 x[1]인 "a"가 포함되어 있는 벡터들은 TRUE 값을 반환하고, 포함되지 않은 벡터들은 FALSE 값을 반환한 것을 볼 수 있습니다.

grep() 예시

아래에서는 grep() 함수를 사용하여 y벡터에서 x[1]에 해당하는 문자열을 필터링하는 두 가지 방법을 보여줍니다.
value = T 옵션을 추가하면 필터링된 문자열들이 반환되며, ignore.case = T 옵션은 대소문자 구분 없이 필터링을 수행합니다.

grep(pattern = x[1], x = y, value = T)
[1] "apple"  "banana" "graph"  "orange" "peach" 
grep(pattern = x[1], x = y, ignore.case = T)
[1] 1 2 3 4 5

결론

R 프로그래밍에서 grepl()grep() 함수는 문자열 검색과 필터링에 유용하게 활용될 수 있습니다. 이 함수들의 활용법을 숙지하면 데이터 분석에서 문자열 처리를 더욱 효율적으로 수행할 수 있습니다.

이번 포스트에서는 문자열 패턴 검색을 위해 내장 함수인 grepl(), grep()를 사용하였다면, 다음 포스트에서는 R 필수 패키지인 tidyversestringr패키지를 이용하여 풀이를 진행해 보겠습니다.

관련 링크

[1] [R] 텍스트 데이터 처리 Tip and Tricks (feat. stringr)
[2] [R] 문자열 분리, 공백 제외 문자 카운트 하기 (feat. stringr)
[3] [R] 문자열에서 패턴 검색하기 (feat. str_detect, str_subset, str_which)