본문 바로가기
R

[R.아르] 일부 글자로 vlookup() 기능 사용하기 pmatch()

by LightBlogger 2016. 10. 4.

pmatch()는 partial match 의 약자로


일부 문자열을 입력하면 주어진 벡터 중 몇 번째 요소가 해당 문자를 포함하는지 반환해 준다.


예를 들어 다음과 같은 x에서



appl을 찾으면 첫 번째 요소인 apple에 포함되어 있다고 알려준다.



2016/09/30 - [R] - [R.아르] 객체 지우기 rm() / 특정 문자가 포함된 행 추출하기 grep() 에서 본 grep()과 비슷하지만 


인자로 벡터를 받을 수 있다는 점에서 차이가 있다. 후에서 확인할 것이다.


계속해서 'ap'을 찾으면



알 수 없다고 나온다. 


이는 ap을 포함한 문자열이 1, 2, 3, 5 등으로 너무 많기 때문이다. 


R은 이들을 동등하게 취급하며 결과값을 반환하지 않는다.


하지만 'app'의 경우에는



2번째 요소를 반환해 주는 것을 알 수 있다.


1, 2, 5 가 모두 app을 포함하고 있지만


완전 일치 exact match 가 있을 경우, 우선적으로 반환하는 것이다.



pmatch()는 문자열을 앞에서부터 매칭한다. 즉,



ppl은 apple에, range는 orange에 있지만 값을 반환하지 않는다.


오직 앞에서부터 일치하는 문자열이 있을 때만 값이 반환된다.



이제 벡터를 넣어 보자.


다음과 같은 y가 있다고 할 때



x에서 y의 문자열을 포함하는 것을 찾으려면 pmatch()를 사용한다.



ape는 x의 3번째 행에, apps는 x의 5번째 행에 존재한다는 의미이다.


그런데 5번째의 apps는 x의 5번째에 일치하는 것이 있음에도 찾을 수 없다고 나온다.


이는 y의 apps가 이미 x의 appstore와 일치되어, 말하자면 appstore가 소모되었기 때문이다.


1:1 매치가 기본값인 셈. 


이전에 맞는 값이 있어도 영향 받지 않도록 하려면 [duplicates.ok=] 혹은 줄여서 [dup=] 옵션을 사용한다.



값이 잘 반환되는 것을 볼 수 있다.


이제 cbind()를 이용하여 데이터프레임을 다음과 같이 합치면 되겠다.




반응형

댓글