Fuzzyjoin совпадение, основанное на двух разных столбцах вместо одного? - PullRequest
0 голосов
/ 08 мая 2018

Я хотел бы задать вопрос относительно пакета fuzzyjoin.Я очень новичок в R, и я обещаю, что прочитал файл readme и выполнил примеры на https://cran.r -project.org / web / packages / fuzzyjoin / index.html , прежде чем задавать этот вопрос.

У меня есть список местных названий, которые я хотел сопоставить с названиями видов растений.Простая версия моего списка будет выглядеть ниже.Данные 1 имеют столбец LocalName со многими опечатками народного имени.Данные 2 - это таблица с правильными местным названием и видами, на которой должно основываться соответствие.

data1 <- data.frame(Item=1:5, LocalName=c("BACTERIA F", "BAHIA", "BAIKEA", "BAIKIA", "BAIKIAEA SP")) 
data 1
  Item   LocalName
1    1  BACTERIA F
2    2       BAHIA
3    3      BAIKEA
4    4      BAIKIA
5    5 BAIKIAEA SP
data2 <- data.frame(LocalName=c("ENGOKOM","BAHIA","BAIKIA","BANANIER","BALANITES"), Species=c("Barteria fistulosa","Mitragyna spp","Baikiaea spp", "Musa spp", "Balanites wilsoniana"))
data2
      LocalName              Species
1   ENGOKOM   Barteria fistulosa
2     BAHIA        Mitragyna spp
3    BAIKIA         Baikiaea spp
4  BANANIER             Musa spp
5 BALANITES Balanites wilsoniana

Я попытался использовать функцию stringdist_left_join, и ей удалось правильно сопоставить многие виды.Я веду себя консервативно, устанавливая max_dist = 1, потому что в моем списке многие местные названия очень похожи.

library(fuzzyjoin)
table <- data1%>%
stringdist_left_join(data2, by=c(LocalName="LocalName"), max_dist=1)
table

  Item LocalName.x LocalName.y       Species
1    1  BACTERIA F        <NA>          <NA>
2    2       BAHIA       BAHIA Mitragyna spp
3    3      BAIKEA      BAIKIA  Baikiaea spp
4    4      BAIKIA      BAIKIA  Baikiaea spp
5    5 BAIKIAEA SP        <NA>          <NA>

Однако у меня есть один вопрос.Как видно из данных1, элемент 5 BAIKIAEA SP фактически соответствует столбцу Species данных2 вместо LocalName.У меня есть много таких записей, где LocalName в данных 1 были либо опечатками местных названий, либо названий видов, однако я не уверен, как сделать так, чтобы stringdist_left_join совпадал с двумя столбцами данных 2 с одним столбцом данных 1. Я попытался изменить кодыв нечто вроде этого:

table <- data1%>%
stringdist_left_join(data2, by=c(LocalName="LocalName"|"Species"), max_dist=1)    

, но это не сработало, ссылаясь на «Ошибка в« LocalName »|« Species »: операции возможны только для числовых, логических или сложных типов».Кто-нибудь знает, возможно ли такое сопоставление?Заранее спасибо!

...