Использование stringdist_left_join для соединения нескольких столбцов, но не всех из них нечетких

У меня есть набор данных публикаций из 1,3 миллиона строк, и для каждой записи я хочу получить paper_id из второго набора данных с 8,6 миллионами строк. Идея состоит в том, чтобы использовать несколько столбцов из обеих таблиц для поиска совпадений для набора данных 1 в наборе данных 2, как показано в этом функциональном, но упрощенном сценарии:

library(fuzzyjoin); library(tidyverse)

dataset1 %>%
  stringdist_left_join(dataset2 %>% select(Title, Year, Publication_id, Paper_id), 
                       by = list(x = c("Title", "Year", "Publication_id"), 
                                 y = c("Title", "Year", "Publication_id"))
                       max_dist = 3, ignore_case = TRUE, distance_col = NULL)

У меня тут две проблемы. Во-первых, только Title имеет вариации (опечатки, сокращения, специальные символы и т. Д.), Которые потребуют нечеткого сопоставления, но код допускает вариации во всех трех используемых полях. Это увеличивает количество возможных совпадений с неправильными, поскольку похожие заголовки появляются в разные годы и публикации.

Я мог подумать, что решение этой первой проблемы будет следующим:

library(fuzzyjoin); library(tidyverse)

dataset1 %>%
  stringdist_left_join(dataset2 %>% 
                       select(Title2 = Title, Year2 = Year, Pub_id2 = Publication_id, Paper_id), 
                       by = list(x = c("Title", "Year", "Publication_id"), 
                                 y = c("Title2", "Year2", "Pub_id2"))
                       max_dist = 3, ignore_case = TRUE, distance_col = NULL) %>%
  filter(Year == Year2, Publication_id == Pub_id2)

Это решило бы первую проблему, но есть и вторая: сценарий работает нормально с образцами данных, но когда я пытаюсь использовать его для всего набора данных, он приводит к исчерпанию памяти вектора ошибок (достигнут предел?).

Итак, мои вопросы:

  1. Можно ли определить, какие столбцы должны быть идентичными, а какие - нечеткими, что может облегчить сценарий?

  2. Есть ли возможность разделить оба набора данных на подмножества в соответствии с идентичными переменными, а затем запустить нечеткое совпадение по заголовку внутри подмножеств, объединяя все обратно? (Я не уверен, что это сработает, так как у меня было бы 180 тысяч подмножеств: 30 тысяч публикаций за шесть лет).

Любая помощь приветствуется.

Лучший


person André Brasil    schedule 23.02.2021    source источник