4

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

4

0 回答 0