※ R 문자열 처리 - stringr 패키지/정규표현식
◎ Base Package
- 문자열 길이
nchar(x, type = "chars", allowNA = FALSE, keepNA = NA) |
<인수설명>
type | "bytes", "chars", "width" 3 가지가 있다 |
keepNA | NA를 NA로 반환할지 문자열로 반환할지 결정 |
> str = c('Hello World', '안녕하세요')
> length(str)
[1] 2
> nchar(str)
[1] 11 5
> nchar(str, type='width')
[1] 11 10
> nchar(str, type='bytes')
[1] 11 10
length() 함수는 벡터가 가지고있는 원소의 수를 반환하고, nchar() 함수는 문자로 이루어진 각 원소의 문자의 수를 반환한다. 공백은 문자의 수 1만큼을 차지한다.
"bytes" - 문자열을 저장하는데 필요한 바이트 수, 한글은 1글자당 2바이트로 저장
"chars" - 문자 수
"width" - 고정폭 글꼴로 문자열을 출력하는데 사용할 출력될 칸의 수, 계산할 수 없는 경우 "chars"와 동일
> str[3] = NA
> nchar(str, keepNA=TRUE)
[1] 11 5 NA
> nchar(str, keepNA=FALSE)
[1] 11 5 2
keepNA는 결측치가 있을 때 TRUE이면 NA로 FALSE이면 문자열로 취급해 문자의 수를 반환한다.
- 문자열 인코딩
encodeString(x, width = 0, quote = "", na.encode = TRUE, justify = c("left", "right", "centre", "none")) |
<인수설명>
width | 너비 |
justify | 정렬 방법 |
> encodeString(str, width=16)
[1] "Hello World " "안녕하세요 "
> encodeString(str, width=16, justify='right')
[1] " Hello World" " 안녕하세요"
문자열 출력에서 너비와 정렬 방법을 지정할 때는 encodeString() 함수를 사용한다.
width 인수로 문자열의 출력 너비를 16으로 지정하여 출력하면 문자열 뒤로 부족한 글자 수만큼 공백이 만들어진다.
- 문자열 연결
paste(..., sep = " ", collapse = NULL) |
<인수설명>
sep | 연결된 문자열의 구분자 |
collapse | 연결된 문자열의 구분자 |
> paste('Hello', 'World', '안녕하세요')
[1] "Hello World 안녕하세요"
paste() 함수는 기본적으로 공백을 이용해 문자열을 연결해준다.
> str1 = c('Hello', '안녕')
> str2 = c('World', '하세요')
> paste(str1, str2)
[1] "Hello World" "안녕 하세요"
> paste(str1, str2, sep='-')
[1] "Hello-World" "안녕-하세요"
> paste(str1, str2, sep='-', collapse=' ')
[1] "Hello-World 안녕-하세요"
문자열 연결 시 구분자를 지정하려면 sep 인수를 사용한다. collapse 인수를 사용하면 벡터의 전체 문자열을 연결할 수 있다.
- 문자열 분리
strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE) |
<인수설명>
split | 분리에 사용될 문자 벡터로 정규표현식을 사용할 수 있다. |
> strsplit('Hi Hello 안녕', split=' ')
[[1]]
[1] "Hi" "Hello" "안녕"
> str = c('Hi Hello 안녕', 'Korea World')
> strsplit(str, ' ')
[[1]]
[1] "Hi" "Hello" "안녕"
[[2]]
[1] "Korea" "World"
split=' '는 공백을 기준으로 문자열을 분리한다는 뜻이다. 반환된 결과를 보면 리스트 자료형임을 알 수 있다.
- 문자열 추출, 치환
substr(x, start, stop) substring(text, first, last = 1000000L) |
<인수설명>
start, first | 첫 번째 문자 번호 |
stop, last | 마지막 문자 번호 |
> str = 'I Love You'
> substring(str, 3, 6)
[1] "Love"
> substr(str, 3, 6)
[1] "Love"
> substr(str, 3, 6) = 'Like'
> str
[1] "I Like You"
start와 stop 인수 자리에 단일 숫자를 지정하면 substr() 함수와 substring() 함수의 결과가 같다.
> substr(str, 3, 3:6)
[1] "L"
> substring(str, 3, 3:6)
[1] "L" "Lo" "Lov" "Love"
stop 인수 자리에 벡터를 지정할 경우 substr() 함수는 벡터의 첫번째 원소 3만을 값으로 받아 3부터 3까지의 문자인 "L"을 반환한다. substring() 함수는 벡터의 모든 원소를 값으로 받을 수 있고, 각각의 결과값을 벡터로 반환한다.
> substring("abcdef", 1:6, 1:6)
[1] "a" "b" "c" "d" "e" "f"
substring() 함수에서 start (first) 인수 자리에도 같은 길이의 벡터를 지정하면 각 벡터에서 같은 인덱스끼리 묶여 6개의 값을 반환받을 수 있다.
- 문자열 변환
chartr(old, new, x) | 문자 변환 |
tolower(x) toupper(x) casefold(x, upper = FALSE) |
소문자로 변환 대문자로 변환 대/소문자 변환 |
> str = 'day holiday'
> chartr('a', 'o', str)
[1] "doy holidoy"
> chartr('day', 'guy', str)
[1] "guy holiguy"
> str
[1] "day holiday"
chartr() 함수는 문자열에서 old 문자를 new 문자로 변환한다. 이때 old 문자와 new 문자의 문자열 길이가 같아야 한다.
> chartr('day', 'ab', str)
Error in chartr("day", "ab", str) :
'old'의 길이가 'new'의 길이보다 깁니다
> chartr('day', 'abcdef', str)
[1] "abc holiabc"
new 문자열의 길이가 더 짧으면 Error가 발생하고, new 문자열의 길이가 더 길면 긴만큼의 문자열은 잘려서 변환하는데 영향을 주지 못한다.
> str = 'I Love You'
> tolower( str )
[1] "i love you"
> toupper( str )
[1] "I LOVE YOU"
> casefold( str )
[1] "i love you"
> casefold( str, upper=T )
[1] "I LOVE YOU"
> str
[1] "I Love You"
tolower() 함수는 대문자를 소문자로 변환한다.
toupper() 함수는 소문자를 대문자로 변환한다.
casefold() 함수는 upper 옵션에 따라 대문자 혹은 소문자로 변환한다.
<R 문자열 처리 - base 패키지>
'R > Data Operation' 카테고리의 다른 글
R 문자열 처리 - stringr 패키지/정규표현식 (0) | 2020.12.18 |
---|---|
R 내장데이터셋 Built-in Dataset - attach/detach (0) | 2020.12.12 |
R 데이터 분리, 병합, 정렬 - split/subset/merge/sort/order (0) | 2020.12.05 |
R table 계열 함수 - 집계함수 (0) | 2020.11.26 |
R apply 계열 함수/replicate/sweep/aggregate (0) | 2020.11.16 |
댓글