각각 100K 행 이상인 2 개의 데이터 세트가 있습니다. 릴리스 날짜를 사용하는 것과 마찬가지로 하나의 열 ('영화 제목')과 일치하는 퍼지 문자열을 기반으로 병합하려고합니다. 아래 두 데이터 세트의 샘플을 제공하고 있습니다.r에 일치하는 퍼지 문자열
데이터 세트-1
itemid userid rating time title release_date
99991 1673 835 3 1998-03-27 mirage 1995
99992 1674 840 4 1998-03-29 mamma roma 1962
99993 1675 851 3 1998-01-08 sunchaser, the 1996
99994 1676 851 2 1997-10-01 war at home, the 1996
99995 1677 854 3 1997-12-22 sweet nothing 1995
99996 1678 863 1 1998-03-07 mat' i syn 1997
99997 1679 863 3 1998-03-07 b. monkey 1998
99998 1680 863 2 1998-03-07 sliding doors 1998
99999 1681 896 3 1998-02-11 you so crazy 1994
100000 1682 916 3 1997-11-29 scream of stone (schrei aus stein) 1991
세트 - 2
itemid userid rating time title release_date
1 2844 4477 3 2013-03-09 fantã´mas - 〠l'ombre de la guillotine 1913
2 4936 8871 4 2013-05-05 the bank 1915
3 4936 11628 3 2013-07-06 the bank 1915
4 4972 16885 4 2013-08-19 the birth of a nation 1915
5 5078 11628 2 2013-08-23 the cheat 1915
6 6684 4222 3 2013-08-24 the fireman 1916
7 6689 4222 3 2013-08-24 the floorwalker 1916
8 7264 2092 4 2013-03-17 the rink 1916
9 7264 5943 3 2013-05-12 the rink 1916
10 7880 11628 4 2013-07-19 easy street 1917
내가 'agrep이'살펴 보았다하지만 한 번에 하나의 문자열과 일치합니다. 'stringdist'함수는 훌륭하지만 루프에서 실행하고 최소 거리를 찾은 다음 데이터 세 트 크기가 주어지면 시간이 많이 소요되는 추가 사전 처리를 수행해야합니다. 문자열에는 퍼지 매칭이 필요하기 때문에 오타 및 특수 문자를 사용할 수 있습니다. 나는 주변을 둘러 보았고 'Lenenshtein'과 'Jaro-Winkler'방법을 발견했다. 나중에 읽은 것은 문자열에 오타가있을 때 유용합니다.
퍼지 매칭만으로는 좋은 결과를 얻을 수 없습니다. 예를 들어, 한 데이터 세트의 영화 제목 '장난감 이야기'는 다른 장난감 세트의 '장난감 이야기 2'와 일치 할 수 있습니다. 따라서 일치하는 영화가 고유한지 확인하려면 출시 날짜를 고려해야합니다.
루프를 사용하지 않고이 작업을 수행 할 수있는 방법이 있는지 알고 싶습니까? 최악의 시나리오 루프를 사용해야하는 경우, 어떻게하면 효율적이고 신속하게 작동하게 할 수 있습니까?
다음 코드를 시도했지만 처리하는 데 많은 시간이 걸렸습니다.
for(i in 1:nrow(test))
for(j in 1:nrow(test1))
{
test$title.match <- ifelse(jarowinkler(test$x[i], test1$x[j]) > 0.85,
test$title, NA)
}
시험 - 1682 개 독특한 영화 이름은 대소에게 TEST1을 낮추기로 변환 포함 - 11,451 독특한 영화 이름은 대소에게
루프 위해를 방지하고 빠르게 작업 할 수있는 방법이 있나요 낮은 변환 포함?
질문을 다시 게시하지 마십시오. 현상금 시작 – rawr