Функция R для определения несовпадающих строк - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь сравнить 2 data.frames, "V1" представляет мою CRM, "V2" представляет потенциальных клиентов, которых я хотел бы разослать.

'V1 имеет приблизительно 8k элементов' 'V2 имеет приблизительно 25k элементов '

Мне нужно сравнить каждую строку в V2 с каждой строкой в ​​V1, отбросить каждый экземпляр, где в V1 существует элемент V2.

Затем я хотел бы вернуть только те элементы, которые не отображаются ни точно, ни свободно в V1 в столбце Leads.

Цель состоит в том, чтобы отправить отведение (V2), которого нет в CRM (V1).

добился хорошего прогресса в пакете stringdist и разделил 'soundex' на 'osa', чтобы улучшить мои шансы, хотя этот метод все еще возвращает элементы в V1.:(

Это ожидаемый результат, который я ищу в Столбец Leads, основанный на этом примере:

Leads: J.Jones Restoration AW Builders C & C Contractors

Любая помощь будет принята с благодарностью, и я прошу прощения, если это неясно каким-либо образом.

library(reprex)
library(tidyverse)
#> Warning: package 'tibble' was built under R version 3.6.2
library(tidystringdist)

df <- tibble::tribble(
  ~V1,  ~V2,
  "5th Generation Builder", "5th Generation Builder, LLC",
  "5th Generation Builders Inc.",   "5th Generation Builders",
  "89 Contractors LLC", "89 Contractors LLC",
  "906 Studio Architects LLC",  "906 Studio Architects",
  "A & A Glass Co.",    "Paragon Const.",
  "A & E Farm", "A & E Farm",
  "A & H GLASS",    "C & C Contractors",
  "A & J Homeworks,Painting, and Restoration",  "A.W. Builders",
  "Paragon Const.", "J. Jones Restoration",
  "A & L Construction", "A & L Const.")

tidy_e <- tidy_stringdist(df) %>% 
  filter(soundex>=1) %>% 
  select(-V1, V2) %>% 
  arrange(V2,osa) %>% 
  mutate(V2, sim = soundex/ osa) %>% 
  distinct(V2, osa, soundex, sim) %>% 
  rename('Leads'= 'V2')

Создать d на 2020-04-13 по представлению пакета (v0.3.0)

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете использовать пакет fuzzyjoin , предназначенный для объединения таблиц на основе неточного сопоставления, такого как расстояние между строками. (Отказ от ответственности в том, что я сопровождающий).

Если у вас были данные в двух отдельных таблицах V1 и V2:

V1 <- tibble(name = c("5th Generation Builder", "5th Generation Builders Inc.", "89 Contractors LLC", 
                      "906 Studio Architects LLC", "A & A Glass Co.", "A & E Farm", 
                      "A & H GLASS", "A & J Homeworks,Painting, and Restoration", "Paragon Const.", 
                      "A & L Construction"))

V2 <- tibble(name = c("5th Generation Builder, LLC", "5th Generation Builders", "89 Contractors LLC", 
                      "906 Studio Architects", "Paragon Const.", "A & E Farm", "C & C Contractors", 
                      "A.W. Builders", "J. Jones Restoration", "A & L Const."))

Тогда вы можете использовать stringdist_anti_join(), чтобы найти те, в V2, у которых нет совпадения с soundex в V1:

V2 %>%
  stringdist_anti_join(V1, by = "name", method = "soundex")

Результаты:

# A tibble: 3 x 1
  name                
  <chr>               
1 C & C Contractors   
2 A.W. Builders       
3 J. Jones Restoration

См. эту виньетку , чтобы узнать больше о stringdist_ соединениях .


Обратите внимание, что если вы хотите увидеть , которому соответствует каждый, вы можете использовать stringdist_left_join():

V2 %>%
  stringdist_left_join(V1, by = "name", method = "soundex")
# A tibble: 12 x 2
   name.x                      name.y                      
   <chr>                       <chr>                       
 1 5th Generation Builder, LLC 5th Generation Builder      
 2 5th Generation Builder, LLC 5th Generation Builders Inc.
 3 5th Generation Builders     5th Generation Builder      
 4 5th Generation Builders     5th Generation Builders Inc.
 5 89 Contractors LLC          89 Contractors LLC          
 6 906 Studio Architects       906 Studio Architects LLC   
 7 Paragon Const.              Paragon Const.              
 8 A & E Farm                  A & E Farm                  
 9 C & C Contractors           NA                          
10 A.W. Builders               NA                          
11 J. Jones Restoration        NA                          
12 A & L Const.                A & L Construction          
...