我想问一个关于fuzzyjoin包的问题。我是R的新手,我保证在我提出这个问题之前,我已阅读了自述文件并在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>
但是,我有一个问题。从data1可以看出,Item 5 BAIKIAEA SP实际上与data2的Species列匹配,而不是LocalName。我有很多这样的条目,其中数据1中的LocalName是本地名称的错别字或物种名称,但是,我不知道如何使stringdist_left_join匹配两列数据2与一列数据1.我尝试修改代码进入这样的事情:
table <- data1%>%
stringdist_left_join(data2, by=c(LocalName="LocalName"|"Species"), max_dist=1)
但它不起作用,引用“LocalName”|“Species”中的“错误”: 操作只适用于数字,逻辑或复杂类型“。有谁知道这种匹配是否可行?提前感谢!