Fuzzyjoin匹配基于两个不同的列而不是一个?

时间:2018-05-08 18:36:17

标签: r join fuzzyjoin

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

0 个答案:

没有答案