Кажется, что используемая мной функция grep работает неправильно, и я не могу понять, почему? - PullRequest
0 голосов
/ 05 мая 2018

У меня есть два довольно больших фрейма данных, которые я хотел бы сопоставить друг с другом. Мой собственный фрейм данных (компании) состоит из 1812 компаний, которые я экспортировал в Google Doc, поэтому вы можете легко просмотреть их все:

Spreadsheet

Другой имеющийся у меня фрейм данных (Master_list) очень большой, с парой миллионов наблюдений, поэтому, к сожалению, я не могу этого показать, но в основном он состоит из многих других компаний. Я хочу получить названия компаний из "Master_list" на основе названий компаний из моего фрейма данных "Companies".

Написание этих названий компаний имеет небольшие различия между двумя фреймами данных. Таким образом, точное совпадение для большинства строк невозможно.

Вот структура моего фрейма данных:

> str(Companies)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   1812 obs. of  1 variable:
 $ Companies_Generated: chr  "TOPSOE FUEL CELL" "HALDOR TOPSØE" "DKFZ DEUTSCHES KREBSFORSCHUNGSZENTRUM" "NIL TECHNOLOGY" ...

Функция, которую я использую для достижения соответствия, такова:

Matches.grep <- unique (grep(paste(Companies$Companies_Generated,collapse="|"), 
                         Master_list$Names, value=TRUE))

Это занимает ок. 2,5-3 часа, чтобы выполнить, и, кажется, восстановить тысячи странных наблюдений.

Например, R получает имя «PIENA INC» в Matches.grep, и ни одно из этих слов не появляется в моем фрейме данных «Companies», поэтому я не знаю, что заставляет R получать это имя как совпадение?

Я тестировал это много раз с гораздо меньшим размером выборки, и каждый раз, когда он, кажется, работал без проблем, но когда я использую свой большой фактический размер выборки, я получаю эти несвязанные совпадения, казалось бы, из ниоткуда.

Извините, что я не могу предоставить никаких примеров, но, похоже, всякий раз, когда я использую гораздо меньший образец, он работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...