У меня есть 2 набора данных с более чем 100K строк. Я хотел бы объединить их на основе нечеткой строки, соответствующей одному столбцу («название фильма»), а также использовать дату выпуска. Я предоставляю образец из обоих наборов данных ниже.Нечеткое совпадение строк в 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» хороша, но вам нужно запустить ее в цикле, найти минимальное расстояние, а затем перейти к дальнейшей прецессии, что очень трудоемко, учитывая размер наборов данных. Строки могут иметь опечатки и специальные символы, из-за которых требуется нечеткое согласование. Я осмотрелся и нашел методы «Лененштейна» и «Яро-Винклера». Чем позже я прочитаю, тем лучше, когда у вас есть опечатки в строках.
В этом случае только нечеткое совпадение может не обеспечивать хороших результатов, например, название фильма «игрушечная история» в одном наборе данных может быть сопоставлено с «игрушечным рассказом 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 - содержит 11451 уникальных имен фильма конвертируются в нижнем регистре
Есть ли способ, чтобы избежать для петель и заставить его работать быстрее?
не отправляйте свой вопрос. запустите bounty – rawr