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 의 차이에 대하여 포스팅하도록 하겠습니다.
도움이 되셨다면, '공감' 버튼 부탁드립니다^^
'R_statistics > Rs_preparation' 카테고리의 다른 글
[R프로그래밍] 데이터전처리 unique:: 중복값처리 (0) | 2019.11.12 |
---|---|
[R프로그래밍] 데이터전처리 intersect:: 벡터에서 중복되는 값 찾기 (0) | 2019.11.06 |
[R프로그래밍] 4분위 그룹 만들기, quartile grouping (0) | 2019.03.18 |
[R프로그래밍] factor, 범주형 변수들의 level 설정하기 (0) | 2019.02.27 |
[R프로그래밍] Text 처리, 텍스트 마이닝 (0) | 2019.02.20 |