본문 바로가기

R_statistics/Rs_preparation

[R프로그래밍] 데이터전처리 stringr:: 문자, 텍스트, str_split, 변수 이름 나누기,

R의 가장큰 장점이라면, 자연어 처리가 가능하다는 것이겠죠?

바로 예시로 들어가보겠습니다.





#1단계 - 예시 데이터 프레임 만들기 

names<- rep(c("pig silver", "pig gold", "dog silver", "cat gold", "cow pink"),6)
group<- rep(c(1:6),5)
category<- rep(c("a","k","d"),10)
ikarus <- data.frame(names,group,category)
head(ikarus)


ikarus 라고 하는 data.frame 을 형성해줍니다.

이 데이터프레임에서 저희가 관심이 있는건 names 라는 column 입니다.

나머지 (group, category) 는 너무 없어보일 것 같아서 그냥 만들어준 변수들입니다.


names 라는 변수의 값들을 잘 살펴보면, 동물이름 (pig, dog, cow)+ 색상 (silver, gold, pink) 로 

구성이 되어있는 것을 확인할 수 있습니다.


여기에서 목표는 바로 ! 

동물이름만을 추려내서 새로운 변수 ( coloumn ) 을 기존의 데이터프레임에 추가하는 것입니다.


#2단계 - 핵심! 자연어처리

library('stringr')
divname<-as.data.frame(do.call (rbind, str_split(ikarus$names, " ", n=2)))
divname


이 부분이 핵심입니다.

str_split 명령어를 이용하여 일단 names 변수들의 값을 pig, silver 이렇게 분리를 시켜주게 됩니다.


str_split을 이용하여 분리를 하면 값들이 list 로 반환이 되게 되고...

그 list 들을 다시 강제로 data.frame 으로 묶어주기 위하여 do.call (rbind.....) 이 명령어가 들어가게 됩니다. 


divname 을 입력해보면 아시겠지만...

V1 이라는 column 은 동물이름이 들어가있고, V2 라는 column 은 색상이 들어가있습니다.

저희가 관심이 있는 건 동물이름이기에... V1 colume 만 뽑아내겠습니다.


#3단계 - 변수추가

animal <- as.vector(animal <- divname[,1])
ikarus$animal <- animal
ikarus


V1 column만을 뽑아내서 animal 이라는 벡터로 변형을 하여, ikarus 에 animal 이라는 column 으로 추가하였습니다.

최종적으로 완성된 데이터프레임을 보면 가장 마지막 열에 animal 이라는 변수가 추가된 것을 확인할 수 있습니다.


R 에 입문하시는 많은 분들이 2번째 단계에서 좌절감을 맛보셨을 가능성이 높죠 ㅎㅎ

'아...저 변수를 이렇게 처리하면 되겠다' 는 생각은 들지만....


실제 코드로 구현을 못하는 슬픈 상황...ㅠ

저 역시도 2단계를 해결하지 못해서 고통을 받았던 기억이 납니다...


핵심은 do.call 명령어 이라고 생각하시면 됩니다.

do.call 은 lapply 와 비슷한 명령어 인데 좀 차이가 있습니다.

나중에 기회가 되면 do.call 과 lapply 의 차이에 대하여 포스팅하도록 하겠습니다.


도움이 되셨다면, '공감' 버튼 부탁드립니다^^