[Обновлено ниже]Частичная строка слияния R большой набор данных
Я хотел бы объединить большой набор данных (112 мегабайт) с меньшим набором данных (< 1мг) на основе общих имен. Имена являются неточными совпадениями между обоими наборами данных. Существует ряд руководств по stackoverflow для частичного совпадения или управления большими наборами данных, но не для обоих. R имеет тенденцию замерзать, когда стандартные методы частичного согласования применяются к очень крупным наборам данных. Ниже приведены некоторые реплицируемые данные.
В большом наборе данных, имена заглавными буквами появляется, фамилия первого, с редкими суффиксами (т.е.)
JUDE, RICHARD J. MR.
В меньшем наборе данных, они в стандартном формате «Имя Фамилия» с нет запятых или суффиксов. Каждое имя имеет связанные переменные, например, сколько денег они дали политическому кандидату или какой компании они работают.
df1$x <- c("JAYSHREE, JOHNSON D. JR.", "JAMESON, KATHERINE", "TOMMEND, LEONARD"),
df1$p <- c(100, 200, 300)
df2$y <- c("Leo Tommend", "Jay Johnson", "Kathy Jameson")
df2$c <- c("Apple", "Google", "Facebook")
Предположим, что x имеет несколько миллионов строк, у имеет несколько тысяч. Я пробовал grepl, pmatch и специализированный алгоритм из другого урока (here), но R зависает, когда я их пытаюсь. Я загрузил X -фрагмент с помощью data.table для скорости.
Я бы ошибался на стороне добавления многих строк к объединенному файловому кадру, если это помогает. Если я могу что-то сделать, чтобы ответить на этот вопрос, пожалуйста, дайте мне знать в комментариях. Спасибо за помощь
[Update]
Благодаря комментаторам, я был в состоянии уменьшить количество матчей до 20000, но это еще далеко не многие. Я включил ссылку на два файла. Эти два файла: 1). Каждый человек в США, который сделал политическое пожертвование в 2012 году и 2). имена каждого основателя Интернета.
https://www.dropbox.com/sh/x6tk1pujvfn0fnb/AACQyuICbJPR7VdDf3bbdIwwa?dl=0
Когда я применил @ код BondedDust, он значительно сократился! Но есть еще дюжины дубликатов имен. Так, например, если «Аарон» основал компанию, будут добавлены все имена «Аарон», и новые файлы предполагают, что 100 человек основали одну и ту же компанию, и каждый «Аарон» дал другому политическому деятелю.
Целью является сопоставление только уникальных примеров каждого интернет-основателя с их политическими вкладами. Мне может потребоваться добавить больше данных в алгоритм сопоставления, чем только их имена (возможности включают их местоположение, но это проблематично, потому что у многих основателей Интернета есть несколько домов)
Надеюсь, это полезно!
Это действительно хорошее начало, но я попробовал его на своем более крупном наборе данных, и у меня появилось слишком много повторяющихся имен для обработки.Я должен был просто поделиться оригинальными документами с самого начала, я делаю, чтобы добавить больше деталей в отредактированную версию вместе со ссылкой на полный файл. – tom
Вы сказали: «Я бы ошибался на стороне добавления многих строк к если это помогает ». (Я предположил, что вы имели в виду« ошибаться на стороне слишком много ».) Вы должны быть более конкретными в отношении своих целей. Вам также необходимо предложить любые дополнительные поля данных, которые могут существовать, чтобы устранить неоднозначность среди самых распространенных имен. –
Справа я собираюсь переделать это в отдельном потоке и добавить более подробную информацию о данных и моих целях. Спасибо за вашу помощь. – tom