[R좀 R려줘!] R gsub() 함수를 이용한 패턴 치환하기!

👈 Click! 투표!

R gsub() 함수를 이용하여 패턴 치환하는 방법에 대해 알아보겠습니다.

예제(text1)에 있는 값을 gsub()함수를 이용해 ‘@’로 치환하는 작업입니다.

참고)

# 활용 함수
# ▶ gsub(): 패턴 치환

아래 내용을 참고해주세요~!


> # 실습 데이터 만들기
> text1 = "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"

> # 숫자 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[0-9]", replacement = "@", x = text1)
[1] "@@@@ asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[0-9]", replacement = "", x = text1)
[1] " asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"

> # 영문 치환
> # __ 소문자 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[a-z]", replacement = "@", x = text1)
[1] "1234 @@@@ASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"

> # __ 대문자 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[A-Z]", replacement = "@", x = text1)
[1] "1234 asdf@@@@  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"

> # 한글 치환
> # __ 자음 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[ㄱ-ㅎ]", replacement = "@", x = text1)
[1] "1234 asdfASDF  @@@@ㅏㅑㅓㅕ가나다라   .!@#"

> # __ 모음 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[ㅏ-ㅣ]", replacement = "@", x = text1)
[1] "1234 asdfASDF  ㄱㄴㄷㄹ@@@@가나다라   .!@#"

> # __ 완성형 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[가-힣]", replacement = "@", x = text1)
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ@@@@   .!@#"

> # 띄어쓰기 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = " ", replacement = "@", x = text1)
[1] "1234@asdfASDF@@ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라@@@.!@#"

> # 응용
> # __ 숫자가 아닌 모든 문자 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[^0-9]", replacement = "@", x = text1)
[1] "1234@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"

> # __ 영문자가 아닌 모든 문자 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[^A-Za-z]", replacement = "@", x = text1)
[1] "@@@@@asdfASDF@@@@@@@@@@@@@@@@@@@@@"

> # __ 한글이 아닌 모든 문자 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[^ㄱ-힣]", replacement = "@", x = text1)
[1] "@@@@@@@@@@@@@@@ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라@@@@@@@"

> # __ 숫자와 영문 대문자가 아닌 모든 문자 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[^0-9A-Z]", replacement = "@", x = text1)
[1] "1234@@@@@ASDF@@@@@@@@@@@@@@@@@@@@@"

> # __ 숫자 2, 3만 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[2-3]", replacement = "@", x = text1)
[1] "1@@4 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"

> # __ 숫자 2, 3, 4, 7, 8, 9 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[2-9]", replacement = "@", x = text1)
[1] "1@@@ asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"

> # __ '.'의 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[\.]", replacement = "@", x = text1)
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   @!@#"

> # __ 두 칸 띄어쓰기와 세 칸 띄어쓰기의 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "  |   ", replacement = "@", x = text1)
[1] "1234 asdfASDF@ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라@.!@#"
> gsub(pattern = " {2}| {3}", replacement = "@", x = text1) #중괄호는({}) 직전 문자를 반복.
[1] "1234 asdfASDF@ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라@.!@#"
> gsub(pattern = " {2,3}", replacement = "@", x = text1)
[1] "1234 asdfASDF@ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라@.!@#"

> # __ "asdf"와 "가나다라" 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[a-f|가-라]", replacement = "@", x = text1)
[1] "1234 @s@@ASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ@@@@   .!@#"

> # __ 1, 3 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[1|3]", replacement = "@", x = text1)
[1] "@2@4 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"

> # __ 1~3, 7~9 치환
> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "[1-3|7-9]", replacement = "@", x = text1)
[1] "@@@4 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"

> # 특수문자내 문자 처리
> # __ 모든 경우의 수 치환
> text2
[1] "<a> <ab> <abc> <abcd>"
> gsub(pattern = "<.*?>", replacement = "@", x = text2) #0개 이상
[1] "@ @ @ @"
> gsub(pattern = "<.+?>", replacement = "@", x = "<>") #<>안에 1글자 이상있어야 변환 됨.
[1] "<>"
> gsub(pattern = "<[a-z]*?>", replacement = "@", x = text2) 
[1] "@ @ @ @"
> gsub("\[[가-힣].*?\]", "", x = "[단독] 니가 가라 하와이") #[]를 포함한 안의 글자.
[1] " 니가 가라 하와이"
> gsub("(\[|\()[가-힣].*?(\]|\))", "", x = "[단독] 니가 가라 하와이(장동건)") #[]를 포함한 안의 글자.
[1] " 니가 가라 하와이"

여기서 응용 질문!!!!!

Q) 숫자 20~25, 42~47을 제외하고 출력하고 싶다면?

> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = "2[0-5]|4[2-7]", replacement = "@", x = "513132154897895132132132")
[1] "51313@5489789513@3@32"

Q) 띄어쓰기 2칸 이상 혹은 탭을 1칸 띄어쓰기로 바꾸고 싶다면?

> text1
[1] "1234 asdfASDF  ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라   .!@#"
> gsub(pattern = " {2,}|t", replacement = " ", x = text1)
[1] "1234 asdfASDF ㄱㄴㄷㄹㅏㅑㅓㅕ가나다라 .!@#"

pattern에서 필터링할 워드를 정의할땐 string 단위가 아닌 각 문자열 하나하나 character 단위이기 때문에 위와 같은 작업이 필요합니다!

※본 내용은 멀티캠퍼스 ‘200224~’200228 ‘R좀 R려줘! R 데이터 분석 with Cloud’를 통해

학습한 내용을 기반으로 직접 작성한 내용입니다.

2020.02.27 – [개발] – [R좀 R려줘!] R 을 이용한 네이버 뉴스 크롤링 하기!

[R좀 R려줘!] R 을 이용한 네이버 뉴스 크롤링 하기!

R을 이용해 사용자 정의 함수 naver_news와 make_url 두개의 함수를 통해 네이버 뉴스를 크롤링 해보도록 하겠습니다! naver_news의 경우 크롤링 하는데 들어갈 목록을 정의한 함수입니다. 저의 경우 신

signedinfo.com

2020.02.27 – [일상] – 멀티캠퍼스 R좀 R려줘! R 데이터 분석 with Cloud 후기!!

멀티캠퍼스 R좀 R려줘! R 데이터 분석 with Cloud 후기!!

안녕하세요 :-)! 오늘은 멀티캠퍼스에서 진행하는 R좀 R려줘! R 데이터 분석 with Cloud 강의 들은 후기에 대해 포스팅 해볼까 합니다! 그럼 시작해볼까요? ㅎㅎ 우선. 저는 사실 멀티캠퍼스를 잘 모

signedinfo.com

2020.02.28 – [개발] – [R좀 R려줘!] R rbind(), colnames()를 활용한 하나의 data.frame() 만들기!

[R좀 R려줘!] R rbind(), colnames()를 활용한 하나의 data.frame() 만들기!

안녕하세요 🙂 오늘은 R함수인 rbind(), colnames()를 활용하여 하나의 data frame을 만들어보려고 합니다! 실습 파일 다운로드 링크 문제는 아래와 같습니다.  Q. “2014_2017.xlsx” 에는 4개의 sheet가 있다…

signedinfo.com

2020.02.28 – [개발] – [R좀 R려줘!] R unique(), nrow()를 활용한 언론사 별 트렌드 파악하기!

[R좀 R려줘!] R unique(), nrow()를 활용한 언론사 별 트렌드 파악하기!

안녕하세요 🙂 오늘은 R함수인 unique(), nrow()를 활용하여 언론사 별 트렌드를 파악해보려고 합니다! 실습 파일 다운로드 링크 문제는 아래와 같습니다. # Q1. 몇 군데 언론사의 뉴스 기사가 수

signedinfo.com

2020.02.28 – [개발] – [R좀 R려줘!] aggregate(), ggplot() 함수를 이용한 언론사별 뉴스기사 그래프 그리기!

[R좀 R려줘!] aggregate(), ggplot() 함수를 이용한 언론사별 뉴스기사 그래프 그리기!

안녕하세요 🙂 오늘은 aggregate(), ggplot()함수를 이용하여 언론사별 뉴스기사 그래프를 그려보려고 합니다! 이전 글을 먼저 확인해주세요! 1) 2020/02/28 – [개발] – [R좀 R려줘!] R rbind(), colnames()를 활..

signedinfo.com

2020.02.28 – [개발] – [R좀 R려줘!] R에서 자연어(NLP)처리를 해보자!

[R좀 R려줘!] R에서 자연어(NLP)처리를 해보자!

안녕하세요 :-)! 오늘은 R에서 자연어(NLP) 처리를 어떻게 하는지 알아보려고 합니다! R 자연어 처리의 경우 SK텔레콤에 재직 중이신 Jeon Heewon님의 깃헙을 참고해보려고 해요! R에 자연어 처리 패키

signedinfo.com

2020.02.28 – [개발] – [R좀 R려줘!] wordcloud2 패키지를 이용해 최다빈도 단어 추출하기!

[R좀 R려줘!] wordcloud2 패키지를 이용해 최다빈도 단어 추출하기!

안녕하세요 🙂 오늘은 wordcloud2 패키지를 이용하여 최다빈도 단어를 추출해보도록 하겠습니다! 추출할 단어를 위해 하나의 csv 파일을 사용할 것이라 다음 링크에서 다운받아서 활용해주세요! df

signedinfo.com

2020.02.28 – [개발] – [R좀 R려줘!] 데이터 분석할때 반복문 진행 현황 확인하기!

[R좀 R려줘!] 데이터 분석할때 반복문 진행 현황 확인하기!

안녕하세요 🙂 데이터 분석할때 반복문을 심심치 않게 사용하는데요! 이때 분석량이 많을 경우 어디까지 진행 됐는지 궁금할때 있잖아요? for(n in 1:65){ cat(paste0(“r==== Progress: “, n, “/65 ====”)) #Sys..

signedinfo.com

2020.02.28 – [개발] – [R좀 R려줘!] 하나의 엑셀(Excel)에 담긴 정보를 특정 기준으로 여러 엑셀 파일로 나누고 합치기!

[R좀 R려줘!] 하나의 엑셀(Excel)에 담긴 정보를 특정 기준으로 여러 엑셀 파일로 나누고 합치기!

안녕하세요 :-)!! 오늘은 하나의 엑셀에 담긴 정보를 여러 엑셀 파일로 쪼개는 방법에 대해 알아보겠습니다! 사용할 예제 파일은 링크를 통해 확인해주세요. ㅎㅎ elec = read.csv(“elec_load.csv”, stringsAs

signedinfo.com

2020.02.28 – [개발] – [R좀 R려줘!] R을 이용하여 네이버 실시간 검색어, 인스타그램 검색 결과 크롤링 하기!!

[R좀 R려줘!] R을 이용하여 네이버 실시간 검색어, 인스타그램 검색 결과 크롤링 하기!!

안녕하세요 🙂 오늘은 R을 이용하여 네이버 실시간 검색어, 인스타그램 검색 결과를 크롤링 해보도록 하겠습니다! #install.packages(“RSelenium”) library(“RSelenium”) library(“wdman”) #node.js나 javascript..

signedinfo.com