문자열 처리 관련 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 |