Fuzzyjoin совпадение, основанное на двух разных столбцах вместо одного?
Я хотел бы задать вопрос относительно пакета 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": операции возможны только для числовых, логических или сложных типов". Кто-нибудь знает, возможно ли такое сопоставление? Заранее спасибо!