Я работаю над большим набором данных, который имеет имена клиентов, каждый из которых должен быть проверен с помощью главного файла с правильными именами (300 КБ), и если он сопоставлен, добавьте имя основного файла для имен файла клиента как нового значения столбца. My prev Question worked for small data setsR: Нечеткое логическое совпадение имени
Оба клиента & Master файл был очищен с помощью tm
и попытался другая логика, но работает только на небольшом наборе данных при применении огромных файлов не является эффективным, сопоставление с образцом здесь не поможет мое мнение вызывает никаких имен не приходит с точным рисунком Файл
Кас
1 chang chun petrochemical
2 chang chun plastics
3 church dwight
4 citrix systems asia pacific
5 cnh industrial services srl
6 conoco phillips
7 conocophillips
8 dfk laurence varnay
9 dtz worldwide
10 electro motive maintenance operati
11 enterasys networks
12 esso resources
13 expedia
14 expedia
15 exponential interactive aust
16 exxonmobil asia pacific pte
17 exxonmobil chemical asia pac div
18 exxonmobil png
19 formula world championship
20 fortitech asia pacific sdn bhd
Мастер
1 chang chun group
2 church dwight
3 citrix systems asia pacific
4 cnh industrial nv
5 conoco phillips
6 dfk laurence varnay
7 dtz group zealand
8 caterpillar
9 enterasys networks
10 exxon mobil group
11 expedia group
12 exponential interactive aust
13 formula world championship
14 fortitech asia pacific sdn bhd
15 frhi hotels resorts
16 gardner denver industries
17 glencore xstrata international plc
18 grace
19 incomm nz
20 information resources
21 kbr holdings llc
22 kennametal
23 komatsu
24 leonhard hofstetter pelzdesign
25 communications corporation
26 manhattan associates
27 mattel
28 mmg finance
29 nokia oyj group
30 nortek
Я попытался с помощью этого простого цикла
for (i in 1:100){
result$x[i] = agrep(result$ICIS_Cust_Names[i], result1$Master_Names, value = TRUE, max = list(del = 0.2, ins = 0.3, sub = 0.4))
#result$Y[i] = agrep(result$ICIS_Cust_Names[i], result1$Master_Names, value = FALSE, max = list(del = 0.2, ins = 0.3, sub = 0.4))
}
* результат *
1 chang chun petrochemical <NA> NA
2 chang chun plastics <NA> NA
3 church dwight church dwight 2
4 citrix systems asia pacific citrix systems asia pacific 3
5 cnh industrial services srl <NA> NA
6 conoco phillips church dwight 2
7 conocophillips <NA> NA
8 dfk laurence varnay <NA> NA
9 dtz worldwide church dwight 2
10 electro motive maintenance operati <NA> NA
11 enterasys networks <NA> NA
12 esso resources church dwight 2
13 expedia <NA> NA
14 expedia <NA> NA
15 exponential interactive aust church dwight 2
16 exxonmobil asia pacific pte <NA> NA
17 exxonmobil chemical asia pac div <NA> NA
18 exxonmobil png church dwight 2
19 formula world championship <NA> NA
20 fortitech asia pacific sdn bhd
опробованы lapply
но не использовать, так как вы можете заметить, мой мастер-файл большой и несколько раз я получить ошибку длины строк не соответствует!
mm<-dt[lapply(result, function(x) levenshteinDist(x ,lapply(result1, function(x) x)))]
#using looping stat. for checking each cus name with all the master names
for(i in seq(nrow(result)))
{
if((levenshteindist(result[i],lapply(result1, function(x) String(x))))==0)
sprintf("%s", x)
}
Какой метод был бы лучше для этого? similar to my Q but not much helpfull я referd несколько Q от STO
это может быть наивным, но при применении с огромными наборами данных, он неправильно себя ведет, может кто-нибудь знаком с R может исправить меня с указанным кодом для levenshteinDist
код:
#check with each value of master file and if matches more than .90 then return master value.
for(i in seq(1:nrow(gr1))
{
for(j in seq(1:nrow(gr2))
{
gr1$jar[i,j]<-jarowinkler(gr1$ICIS_Cust_Names[i],gr2$Master_Names[j])
if(gr1$jar[i,j]>.90)
gr1$res[i] = gr2$Master_Names[j]
}
}
#Please let know if there is any minute error with this code
Пожалуйста, если кто-то работал с такими данными в R, пожалуйста, помогите!
Вы это видели: http://stackoverflow.com/questions/27975705/compare-strings-for-an-approximate-match/27975870 # 27975870 - он тоже не работает отлично, но это нормально (16/20 правильно, без каких-либо настроек). – thelatemail
да, но это сильно отличается от моего вопроса, я тоже пробовал с «adist», но лучше бы я подумал, может ли я решить его через 'levenshteinDist'. Я полагаю, что моя логика для кода выше, но есть небольшая ошибка с циклом, если вы можете исправить меня – KRU
Я применил для небольших наборов данных, которые абсолютно идеальны только для небольших данных, огромные наборы данных не работают – KRU