본문 바로가기
R/Data Operation

R 문자열 처리 - base 패키지

by 통계열등생 2020. 12. 15.
반응형

 R 문자열 처리 - stringr 패키지/정규표현식

small22.tistory.com/29

 

R 문자열 처리 - stringr 패키지/정규표현식

※ R 문자열 처리 - base 패키지 small22.tistory.com/28 type "bytes", "chars", "width" 3.." data-og-host="small22.tistory.com" data-og-source-url="https://small22.tistory.com/28" data-og-url="https://..

small22.tistory.com

 

 

 

 ◎ 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 패키지>

반응형

댓글