В настоящее время я пытаюсь найти потенциальные дубликаты в большом наборе данных (более 500 000 строк), используя нечеткое сопоставлениеЭтот код состоит из трех основных частей:
Функция, которую я написал, которая идентифицирует наиболее похожий потенциальный дубликат в наборе данных (возвращая оценку - она выбирает самую высокую оценку).
Функция, которая определяет позицию записи, которая с наибольшей вероятностью может быть дубликатом.
A для цикла, который выполняет обаприведенных выше функций для каждой записи и возвращает значения в столбце DupScore
и столбце positionBestMatch
.
Пример результирующего набора данных приведен ниже:
Name: DOB: DupScore positionbestMatch
Ben 6/3/1994 15 3
Abe 5/5/2005 11 5
Benjamin 6/3/1994 15 1
Gabby 01/01/1900 10 6
Abraham 5/5/2005 11 2
Gabriella 01/01/1900 10 4
Цикл for для вычисления этих оценок выглядит примерно так (scorefunc
и position func
являются самописными функциями):
for (i in c(1:length(df$Name))) {
df$dupScore[i]<-scorefunc[i]
df$positionBestMatch[i]<-positionfunc[i]
}
Очевидно, что для набора данных с таким количеством строк этоцикл занимает много времени и требует больших вычислительных ресурсов, поскольку он проходит по каждой строке.Как я могу отредактировать цикл for таким образом:
- Когда для строки вычисляется
DupScore
, он также вставляет счет не только в строку [i]
, но и в строкуpositionbestMatch
? - И цикл запускается только для тех с пустыми значениями
DupScore
и positionBestMatch
.
Надеюсь, это имеет смысл!