我想问一个关于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”中的错误:操作仅适用于数字、逻辑或复杂类型”。有谁知道这种匹配是否可能?提前致谢!