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