본문 바로가기
R

str_split 문자열 나누기 in r

by C.Mond 2021. 8. 21.
728x90
728x90

R을 이용해 Data처리를 하다보면 특정 Pattern을 기준으로 문자열을 나누어야 할 경우가 있습니다.

그 기능을 str_split()을 이용해 처리할 수 있습니다.

 

해당 함수는 stringr 패키지에 들어있는 함수이므로 코드 실행전에 해당 패키지를 설치해 주어야 합니다.

toy example은 아래의 data를 사용하겠습니다.

install.packages(stringr)
library(stringr)
a <- data.frame(col1=c("a_b_1","c_d_1","e_f_1"), col2=c(1,2,3))

 

str_split함수의 인자는 다음과 같습니다.

 

str_split(string, pattern, n = Inf, simplify = FALSE)

 

string : 벡터형 data를 input으로 받습니다.

 

pattern : 나누고자 하는 pattern을 지정하여 넣어줍니다.

 

n : 나누고 싶은 갯수를 지정해 줍니다 (Default : Inf)

 

simplify : 문자 벡터의 리스트형으로 반환할것이냐, 문자 matrix로 반환할 것이냐를 정해줍니다 (Default : F)F 문자 벡터의 리스트형, T 문자 matrix

 

해당코드의 결과가 아래처럼 나오는 것을 볼 수 있습니다.

str_split(a$col1,"_")

str_split(a$col1,"_",simplify = T)

simplify인자를 True로 설정을하면 위와같이 matrix형태로 return이 됩니다.

 

여기서 추가로 더 나아가서 str_split을 이용해 나눈 data를 기존의 data에 추가하는 것을 해보겠습니다.

 

 

 

 

 

simplify를 False로 했을때는 sapply함수를 이용해 리스트에서 원하는 위치에 있는 data를 가져올 수 있습니다.

c <- sapply(str_split(a$col1,"_"),"[",1)
a$col3<- c
a

sapply함수를 이용해 list를 인자로 받아 원하는 위치에 있는 data를 가져올 수 있습니다.

그리고 새로운 column에 해당 data를 넣어주면 됩니다.

 

 

 

simplify를 True로 했을때는 아주 간단합니다.

d <- str_split(a$col1,"_",simplify = T)
d
e <- d[,3]
a$col4<- e
a

matrix로 반환되는 data에서 원하는 위치의 data를 슬라이싱해와서 새로만든 column에 data를 넣으면 됩니다.

 

 

 

 

728x90
728x90

댓글