R/R

[R] 08. 문자열관련함수(stringr)

구름솜:D 2023. 11. 29. 17:11
728x90

문자열 처리 관련 stringr 패키지에 있는 외장함수를 사용하여 문자열 관련함수를 사용할 수 있다

 

패키지 설치 및 로드

install.packages('stringr')으로 최초 설치 후
library(stringr)으로 로딩

 

패키지에 있는 외장 함수 목록 확인하는 방법

 

 1)   패키지명:: 패키지 안에 있는 함수 목록 확인 가능

       stringr::                  # 자동완성 기능이 안되면 조회 불가
 2)  ls()
      ls('package:stringr')      

 

 

1. 대소치환  (* string:: 생략가능)
[stringr::]str_to_lower(문자열)     #소문자를 대문자로 치환
[stringr::] str_to_upper(문자열)   #대문자를 소문자로 치환
[stringr::] str_to_title(문자열)       #카멜표기법으로 치환

> stringr::str_to_lower('ABCD')
[1] "abcd"
> stringr::str_to_upper('abde')
[1] "ABDE"
> stringr::str_to_title('abc dd')
[1] "Abc Dd"

 

2. 문자열 추출
str_sub(string = ,  start = 1,  end = -1)      

str_sub(문자열, 시작위치, 끝위치)   #시작/끝위치를 생략한 경우 default 값(시작위치=1, 끝위치 = -1)

> str_sub('abcde', 2, 3)    
[1] "bc"
> str_sub('abcde', 2)      #끝위치생략, 끝까지 출력
[1] "bcde"
> str_sub('abcde',  , 2)   #시작위치생략, 처음부터 출력
[1] "ab"
> str_sub('abcde', -2)     #음수 표기시 반대방향으로 개수만큼 출력
[1] "de"

 

3. 문자열 치환
1) str_replace(string = , pattern = , replacement = )

    str_replace(문자열, 찾을 문자열, 바꿀문자열)  #바꿀 문자열 생략시 찾는 문자열 삭제

#찾는 문자열이 처음등장하는 위치 치환
> str_replace('BANANA', 'A', 'X')  
[1] "BXNANA"
#바꿀 문자열 생략시 찾는 문자열이 처음 등장하는 위치 삭제
> str_replace('BANANA', 'A', '')   
[1] "BNANA"

2) str_replace_all(string = , pattern = , replacement = )

    str_replace _all(문자열, 찾을 문자열, 바꿀문자열)  #바꿀 문자열 생략시 찾는 문자열 삭제

#찾는 문자열 모두 치환
> str_replace_all('BANANA', 'A', 'X')  
[1] "BXNXNX"
#바꿀 문자열 생략시 찾는 문자열 모두 삭제
> str_replace_all('BANANA', 'A', '')   
[1] "BNN"

 

4. 문자열 결합
str_c(...,  sep = '', collapse = NULL)

str_c(결합할 문자열1, 결합할 문자열2, sep = '', collapse = '')

str1 <- c('a','b','c', 'd')
str2 <- c('a','b','c', 'd')

> str_c(str1,str2, sep='-')
[1] "a-a" "b-b" "c-c" "d-d"
> str_c(str1,str2, collapse = '-')
[1] "aa-bb-cc-dd"
> str_c(str1,str2, collapse = '')
[1] "aabbccdd"
> str_c(str1,str2, sep='-',collapse = '' )
[1] "a-ab-bc-cd-d"

 

5. 문자열 분리
str_split(string = , pattern = )

str_split(문자열, 분리할 문자열(정규식표현 사용가능))

 - 문자열 분리 함수는 리스트 형태로 반환

> str_split('a@b@c', '@') 
[[1]]
[1] "a" "b" "c"

> str_split(c('a@b@c', 'A@B@C'),'@') 
[[1]]
[1] "a" "b" "c"
[[2]]
[1] "A" "B" "C"

 

6. 문자열 패턴 확인

str_detect(string = , pattern = )

str_detect(문자열, 찾을 문자열(정규식표현 사용가능))

- 특정패턴을 포함하는지 여부(T/F) 리턴

v1 <- c('a12!0', 'Aza3!!f', 'dfoaa!a!d','aaa','111!zzzA!')

> str_detect(v1, '^(a|A)')           # a 또는 A로 시작하는
[1]  TRUE  TRUE FALSE  TRUE FALSE
> str_detect(v1, '^[aA]')            # a 또는 A로 시작하는
[1]  TRUE  TRUE FALSE  TRUE FALSE
> 
> str_detect(v1, '[aA][aA]')         # a 또는 A가 연속적으로 2회 포함된
[1] FALSE FALSE  TRUE  TRUE FALSE
> str_detect(v1, '[aA]{2}')          # a 또는 A가 연속적으로 2회 포함된
[1] FALSE FALSE  TRUE  TRUE FALSE
> str_detect(v1, '[aA]{2,}')         # a 또는 A가 연속적으로 2회 이상 포함된
[1] FALSE FALSE  TRUE  TRUE FALSE
> 
> str_detect(v1, '[[:punct:]]')                  # 특수기호가 한 번 포함된
[1]  TRUE  TRUE  TRUE FALSE  TRUE
> str_detect(v1, '[[:punct:]][[:punct:]]')       # 특수기호가 연속적으로 두 번 포함
[1] FALSE  TRUE FALSE FALSE FALSE
> str_detect(v1, '[[:punct:]].[[:punct:]]')      # 'Aza3!!f' 값은 포함되지 X
[1] FALSE FALSE  TRUE FALSE FALSE

 

7. 문자열 포함 횟수
str_count(string = , pattern = )

str_count(문자열, 찾을 문자열(정규식표현 사용가능))

> str_count(c('a1a1', 'a1110a'), '\\d')    
[1] 2 4
> str_count(c('a11a1', 'a1110a'), '\\d+')   
[1] 2 1

 

8. 문자열 삭제

1) str_remove(string = , pattern = )

    str_remove(문자열, 삭제할 문자열(정규식표현 사용가능))

> str_remove('1,100,100',',')        
[1] "1100,100"

2) str_remove_all(string = , pattern = )

    str_remove _all(문자열, 삭제할 문자열(정규식표현 사용가능))

> str_remove_all('1,100,100',',')   
[1] "1100100"

 

9. 문자열 삽입

str_pad(string = , width = , side = , pad = ' ') 

str_pad(문자열, 문자열총길이, 삽입방향(left, right, both), 넣을 문자열)

> str_pad('abcde', 10, 'left', '1')
[1] "11111abcde"

 

10. 공백 삭제

str_trim(string = , side =  )    

str_trim(문자열, 삭제방향(left,right,both))

> str_trim('     안녕하세요', 'left')
[1] "안녕하세요"

 

11. 문자열 반복 

str_dup(string = ,  times = )     

str_dup(문자열, 반복횟수)

> str_dup('X', 4)
[1] "XXXX"

 

12. 문자열 위치

1) str_locate(string = , pattern = )            

    str_locate(문자열, 찾을 문자열(정규식표현 사용가능))

> str_locate('a@b@@@@cccc@','@@@@')    # 처음 발견된 패턴의 위치 리턴
     start end
[1,]     4   7

> str_locate(c('a@b@@@@cccc@','ssff@@@@'),'@@@@')     
[1,]     4   7
[2,]     5   8

2) str_locate_all(string = , pattern = )            

    str_locate _all(문자열, 찾을 문자열(정규식표현 사용가능))

> str_locate_all('a@b@cccc@','@')       # 모든 패턴의 위치 리턴
[[1]]
     start end
[1,]     2   2
[2,]     4   4
[3,]     9   9

 

13. 문자열길이 : str_length
length(문자열)         #문자열의 개수
str_length(문자열)   #문자열의 길이

> length('abcd')      
[1] 1
> length(c('abcd','aaa'))       # 벡터의 원소의 수
[1] 2
> str_length(c('abcd','aaa'))   # 벡터 원소 각각의 문자열 길이(4 3)
[1] 4 3

 

 

 ** 정규식표현
^x : x로 시작
x$ : x로 끝나는
. : 엔터를 제외한 한 글자(공백, 숫자, 문자, 특수기호)
x|y : x또는 y
\ : escape character
() : 그룹설정
+ : 1회 이상 반복
? : 0회 또는 1회 반복
* : 0회 또는 1회 이상
{n} : n회 반복
{n,m} : n이상 m이하 반복
{n,} : n이상 

\\d : 숫자
\\w : 글자(문자,숫자,_)
\\W : 글자가 아닌(공백을 포함한 특수기호, _포함되지X)
\\s : 공백

[[:alpha:]] : 문자
[[:dlgit:]] : 숫자
[[:alnum:]] : 글자(문자+숫자)
[[:punct:]] : 특수기호

'R > R' 카테고리의 다른 글

[R] 22. 데이터시각화(plot함수)  (0) 2023.12.08
[R] 09. 조건문(ifelse/if문)  (0) 2023.12.05
[R] 04. 함수(function)  (0) 2023.11.22
[R] 03. 형 변환(casting)  (0) 2023.11.22
[R] 02. 인덱싱(indexing)  (0) 2023.11.22