study blog

String - stringr 패키지를 이용한 문자열 처리 본문

R/1. R 기초

String - stringr 패키지를 이용한 문자열 처리

ivo_lee 2020. 1. 8. 20:26

문자열 처리 (string)

# stringr 이라는 package를 이용하면 문자열 처리 쉽고 편하게 할 수 있음

# stringr 설치하기 

install.packages("stringr")
library(stringr)

 

# stringr 패키지를 이용한 문자열 처리

 

var1 = "Honggd1234Leess9032YOU25최길동2009"

str_length(): 문자열의 길이 구하기

str_length(var1)  # 출력결과: 31  

str_locate(): 찾는 문자열의 시작과 끝을 알려줌

str_locate(var1,"9032")         # start:16  end:19
str_locate(var1,c("9032","Y")) 

str_sub(): 부분문자열 (문자를 끊어와줌)

str_sub(var1,3,8)      #시작 index와 끝 index주면 됨 ( 둘 다 inclusive )

④ str_to_lower(), str_to_upper(): 대소문자 변경

str_to_lower("SjfdkS")    #모두 소문자로 변경
str_to_upper(var1)        #모두 대문자로 변경

str_replace(), str_replace_all(): 문자열 교체

str_replace(var1,"Hong","KIM")  #Hong을 찾아서 KIM으로 바꿔줌

var11 = "Honggd1234Hongss9032YOU25최길동2009"
str_replace(var11,"Hong","KIM")    # 첫 Hong만 바꿈
str_replace_all(var11,"Hong","KIM")  #모든 Hong 다 바꿈

⑥ str_c(): 문자열 결합

var2 = "홍"
var3 = "길동"
str_c(var2,var3)

str_split(): 문자열 분할

var1 = "Honggd1234,Leess9032,YOU25,최길동2009"
str_split(var1,",")      # , 를 기준으로 문자열 분할

# 출력결과: list형태
 [[1]]
 [1] "Honggd1234" "Leess9032"  "YOU25"      "최길동2009"

⑧ paste(): vector 문자열 결합

var1 = c("홍길동","김길동","최길동")
str_c(var1)    #안됨!
paste(var1,collapse = "-")  # -로 구분해서 붙여줌

⑨ str_extract(), str_extract_all() : 조건에 부합되는 것 가져와라

var1 = "Honggd1234,Leess9032,YOU25,최길동2034"
str_extract_all(var1,"34")	    # “34” “34”    # 찾은 값들을 return 

⑩ string_detect() : 포함하는 문자열 찾아라

str_detect(trans,"auto")    #  auto를 포함하는 단어를 trans에서 찾아라

# 정규표현식

[문자]{개수} 형태
소문자 a부터 z까지
대괄호는 문자 1개 지칭
중괄호의 의미: 개수
var1 = "Honggd1234,Leess9032,YOU25,최길동2009"
str_extract_all(var1,"[a-z]{4}")     #""내의 내용은 정규표현식    # 출력값: "ongg" "eess"
                                     # 영문자 소문자로 연달아 4개 나오는 것
str_extract_all(var1,"[A-Z]{2}")     # "YO"
str_extract_all(var1,"[A-Z]{2,}")    # , 를 붙이면 2개 이상을 의미.  # “YOU”
str_extract_all(var1,"[a-z]{4,}")    # “onggd” “eess”
str_extract_all(var1,"[a-z]{2,3}")   # 2개에서 3개 사이     # “ong” “gd” “ees”

ex) 한글만 추출해 보자

str_extract_all(var1,"[가-힣]")    #”최” “길” “동”
str_extract_all(var1,"[가-힣]{2,}")  # “최길동”

ex) 숫자를 추출해 보자

str_extract_all(var1,"[0-9]{2,}")  # “1234” “9032” “25” “2034”

 

ex) 한글을 제외한 나머지 문자들 추출

str_extract_all(var1,"[^가-힣]{5}")     # !가 아니고 ^가 not의 의미
                                        # 한글 아닌 것이 5개 연속으로 있는 것 찾기

ex) 주민등록번호를 검사해 보자

myId = "801112-1210419"
str_extract_all(myId,"[0-9]{6}-[1-4][0-9]{6}")    #[1-4] = [1234]   
                                                  # 출력결과: “801112-1210419”
     
myId2 = "801112-6210419"
str_extract_all(myId2,"[0-9]{6}-[1-4][0-9]{6}")      #character(0)

[string 연습문제]

[연습문제] 
입력으로 최대 100자의 문자열을 이용
입력으로 사용된 문자열에서 숫자만을 추출해서 출력하기
                           ex) Hi2567Hello23kaka890L34TT23 ->2567238903423
이렇게 추출한 문자열에서 개수가 가장 많은 숫자를 찾아서 숫자와 출현빈도를 추출
만약 출현빈도가 같은 숫자가 여러 개인 경우 그 중 가장 작은 숫자와 출현빈도를 출력하기  (2→3, 3→1)
myFun = function(s){
  y <- str_extract_all(s,"[0-9]")
  a <- as.matrix(table(y))
  b <- min(row.names(subset(a,a==max(a))))
  cat("개수많은숫자:",b,"빈도수:",max(a))
}

myFun("kdflriejl128520583290742609")

 

Comments