R복습_stringr패키지와 함수(문자열 가공)

2024. 10. 5. 14:59R분석

stringr패키지

문자열 데이터를 가공하기 위해 자주 사용되는 유용한 패키지로, 문자열 치환, 벡터연산, 함수의 결과를 반복문 없이 저장해주는 등의 편리한 함수들을 가지고 있다.

 

 

stringr패키지 설치

#stringr패키지

#패키지 설치
install.packages('stringr')
library(stringr)

다른 패키지들과 마찬가지로 install.packages를 사용하여 패키지를 설치해준 후, library에 로드한 후 사용해야한다.

 

 

str_count()

#1)str_count(문자열1, 문자열2) : 문자열1에서 문자열2의 개수를 카운트
str_count('abaabb','a') #3개
str_count('안녕하세요','안')

#str_count벡터사용
str_v <- c('apple','banana','melon')
str_count(str_v,'a') #문자열 벡터의 요소마다 a개수 카운트

for(str in str_v){
  print(str_count(str,'a'))
} #이 과정과 똑같음.
#원래 반복문을 사용해야했지만 반복문을 사용할 필요없이 패키지로만 가능

str_count는 str_count(문자열1, 문자열2)의 형태로 사용하며, 문자열1에서 문자열2의 개수를 반환해주는 함수이다. 만약 문자열1이 벡터라면 그 벡터마다 문자열2의 개수를 반환해주는 형식이다. 만약 str_count함수가 없었다면 벡터마다 개수를 파악하기위해서는 반복문을 사용해야했다면, 단수 함수 한줄로 쉽게 결과를 반환받을 수 있다.

 

 

str_c()

#2)str_c(문자열1, 문자열2,...) : 문자열 연결
str1 <- str_c('cute','cat')
print(str1) #연결한 문자 변수에 저장 가능

str2 <- str_c('안녕','하세요')
print(str2)


#str_c벡터사용
v <- c('one','tow','three')
str_c(v,'vecter') #나열된 순서대로 결합되기때문에 이점 주의할것
str_c('vecter',v) 벡터의 요소마다 하나씩 결합됨
str_c('안녕','하세요')
str_c('하세요','안녕')

str_c는 str_c(문자열1, 문자열2,...)의 형태로 사용하며, str_c함수안에 나열된 문자열들을 연결해주는 함수이다. 만약,  str_c함수안에 나열된 인수 중 하나가 벡터라면 벡터의 요소마다 문자열을 연결해주며, str_c함수는 함수안에 인수가 나열된 순서 그대로 연결해주기때문에 원하는 결과값이 있다면 순서에 주의하여 인수를 적어야한다.

 

str_옵션

1. sep()

#str_c옵션
#1)sep 옵션
str_c('a','b','c')
str_c('a','b','c',sep=',') #연결할 문자열 사에마다 넣을 문자열 설정
str_c('a','b','c',sep='@')

str_c에서 sep옵션은 문자열들을 연결해줄때 문자열들의 사이에 넣을 문자열을 지정해줄수 있는 옵션이다. str_c(문자열1, 문자열2,sep='사이에 넣을 문자열')의 형태로 적는다.

 

2.collapse()

#2)collapse옵션
str_c(v,collapse=',')
#sep과 같은 기능을 하지만 벡터일때 사용하는 함수
#문자열 벡터요소사이마다 해당 문자열을 추가함

collapse()는  sep과 같은 기능을 하지만 연결되는 문자열이 벡터일때 사용하는 옵션이다. 문자열 벡터 요소사이마다 해당 문자열을 추가하여준다.

 

 

str_dup()

#str_dup(문자열, 숫자):문자열 반복
str_dup('dog',2)
str_dup('안녕',3)
str_dup('사원',2)

#str_dup 벡터사용
str_dup(v,2)
#벡터에 str_dup사용시, 벡터의 요소마다 반복

str_dup()은 str_dup(문자열1,숫자)의 형태로 사용하며 안에 주어진 숫자만큼 문자열1을 반복하는 함수이다. 만약 str_dup안에 주어진 문자열이 벡터라면 벡터의 요소마다 주어진 숫자만큼 반복하여준다.

 

 

str_length()

#str_length(문자열) : 문자열의 길이 반환
str_length('안녕하세요')
str_length('sunday')

#str_length벡터사용
str_length(v) #벡터의 요소마다 길이 반환

str_length()는 str_length(문자열)의 형태로 사용하며 함수 안에 주어진 문자열의 길이를 반환하는 함수이다. 만약 인수로 주어진 문자열이 벡터라면 벡터요소마다의 문자열 길이를 반환하여준다.

 

 

str_located()

#str_located(문자열1, 문자열2) : 문자열1에서 문자열2위치를 반환(시작, 끝 위치)
str_locate('abab','a') #시작하는 위치와 끝나는 위치
#한글자이기때문에 시작위치와 끝위치가 같아 1이 나옴
str_locate('안녕하세요','안녕')

str_locate_all('abaaabba','a')
#문자열1에 중복값이 있는데, 그 중복값의 위치를 전부 다 보고싶을 경우
#str_locate_all을 사용하여 값을 전부 다출력
#str_locate_all을 사용한 값은 리스트형태로 출력됨
class(str_locate_all('afaffaaa','a')) #list

str_located()는 str_located(문자열1, 문자열2)의 형태로 사용하며 문자열1에서 문자열2의 시작위치와 끝위치를 반환해주는 함수이다. 만약 문자열2의 값이 문자열1에서 중복값이있다면 가장 첫번째로 등장하는 값의 시작위치와 끝위치를 반환해주는데, 중복되는 모든값의 시작위치와 끝위치를 보고싶다면 str_located_all의 옵션을 사용해주면 중복값의 결과들도 전부 확인이 가능하다. 

all을 사용했을때 반환되는 결과는 list로 반환된다.

 

 

str_replace()

#str_replace(원본 문자열, 바꿀대상, 바꿀 문자열) : 문자열 교체
str1 <- 'abbac'
str_replace(str1,'a','*')
str_replace(str1,'b','$')
str_replace_all(str1,'a','*')
#str_replace_all을 사용하면 원본문자열에서 중복되는 값전체를 바꿀 수 있음

str_replace()는 str_replace(원본문자열, 바꿀대상, 바꿀문자열)의 형태로 작성하며 원본문자열에서 바꿀대상을 찾아, 바꿀 문자열로 변경하여 출력하는 함수이다. str_replace함수는 stringr문자열에서도 결측지를 찾아 변경하는 작업에서 가장많이 활용되는 함수이다. 만약 원본 문자열에 바꿀대상문자열의 중복값이 있다면 가장 첫번째로 등장하는 값만 변경되는데, 이때 중복되는 모든값을 바꿀 문자열로 변경하고 싶다면 str_replace_all을 사용하여 변경한다.

 

 

str_split()

#str_split(문자열1, 문자열2) : 문자열1을 문자열2 기준으로 분리
str2 <- str_c('cow','/','dog','/','cat')
print(str2)
#/을 기준으로 분리
str_split(str2,'/')
str_split(str2,'o')

str_split()은 str_split(문자열1, 문자열2)의 형태로 작성하며, 문자열1을 문자열2의 기준으로 분리시켜주는 함수이다. 보통 str_split에 들어가는 문자열1은 벡터인 경우가 많다.

 

 

str_sub()

#str_sub(문자열,start,end) : 시작~끝 번호로 문자열 추출
print(str2)
str_sub(str2,start=1,end=3) #1~3번째 글자까지
str_sub(str2,start=3) #end생략시 끝까지 출력
str_sub(str2,end=4) #start생략시 처음부터
str_sub(str2,start=-4)#음수 기입시 뒤에서부터 N번째 위치를 기준

str_sub()는 str_sub(문자열, start, end)의 형태로 적으며, start값에 주어진 인덱스 번호부터 end값에 주어진 인덱스 번호까지 단어를 추출하여 반환하는 함수이다. 여기서 start값만적고 end값을 생략할 경우 start값에 주어진 인덱스문자부터 끝까지 출력하며 반대로 start값이 생략되고 end값만 적힌 경우 end값에 주어진 인덱스문자부터 처음까지 출력된다.

또한 start값에 음수가 주어진다면 뒤에서부터 n번째 위치를 기준으로 단어를 추출한다.

 

 

str_trim()

#str_trim(문자열) : 문자열 공백 추출
str3 <- ' 문 자 열 '
str_trim(str3) #양쪽 공백제거
#문자열 중간에 존재하는 문자열은 제거 안됨
str_trim(str3,side='right') #오른쪽 공백 제거
str_trim(str3,side='left') #왼쪽 공백 제거

#str_trim백터 사용
str4 <- c(' 문자열 ', '  안녕 ', '  공백  ')
str_trim(str4) #벡터 요소별로 공백 제거

str_trim()은 str_trim(문자열)의 형태로 적으며, 함수안에 주어진 문자열의 양쪽 공백을 제거하는 함수이다.  허나 양쪽 공백삭제만 가능하며, 문자열 중간에 있는 공백은 제거할 수 없다. 또한 문자열이 벡터인경우 벡터의 요소별로 공백을 제거하여 반환한다.

 


학습일기

오늘은 dplyr에 이은 두번째 stringr패키지에 대해 학습했다. 문자열 패키지이다보니 당연히 연산계산보다는 문자열을 가공하는데 초점이 맞춰진 함수들이 대부분이었다. 사실 데이터 분석을 하다보면 숫자이외에도 문자열로 이뤄진 데이터들을 분석하고 가공하는 일들도 정말 많다. 파이썬에서만 봐도 워드클라우드를 이용하여 웹크롤링을 하는경우처럼말이다. 이처럼 숫자만큼 문자도 중요한 데이터의 요소인데, 그런 문자열로 이뤄진 데이터들을 r에서 stringr패키지를 통해 가공하는 법들을 지금 잘 익혀두어야할것같다. 사실 내용적인 부분에서 크게 어려운 부분들은 없으나 다른것들과 마찬가지로 함수는 활용이 중요하니까..!