如何手动匹配 left_join 不匹配的单元格?

How to manually match cells that aren't matched by left_join?

我在 R 中使用 tidyverse 包来匹配两个数据框的城市名称。虽然我的大部分观察结果都匹配,但由于名称略有不同(例如,“Sao Joao Del-Rey”和“Sao Joao Del Rey”),其余观察结果并不匹配。有没有一种方法可以在 left_join 函数(或其他函数)中指定这些城市,以便也匹配它们? 例如,我做了一个可重现的例子,其中“里约热内卢”和“巴黎”的城市在第二个数据框中略有不同。假设我有一个匹配列表 L = ["Rio de Janeiro" = "Rio de-Janeiro", "Paris" = "Pariss"),我如何告诉 R 也匹配这些单元格?提前致谢。

library(tidyverse)

df1 <- data.frame(municipalities = c('New York', 'London', 'Shangai', 'Rio de Janeiro', 'Paris'),
                crimes = c(5, 7, 8, 4, 6))
df2 <- data.frame(municipalities = c('New York', 'London', 'Shangai', 'Rio de-Janeiro', 'Pariss'),
                 GDP = c(45, 56, 67, 78, 89))

df3 <- df1 %>% left_join (df2, by = 'municipalities')
``` R

一个选项是基于距离法的模糊连接

library(fuzzyjoin)
stringdist_left_join(df1, df2, by = 'municipalities') %>%
       transmute(municipalities = municipalities.x, crimes, GDP)

-输出

#  municipalities crimes GDP
#1       New York      5  45
#2         London      7  56
#3        Shangai      8  67
#4 Rio de Janeiro      4  78
#5          Paris      6  89

模糊连接

或者在加入之前清理数据。在您的 reprx 中,您将用 space 替换所有“-”。一个数据集加个-或space等

不无道理

如果输入的数据受到验证不佳的人工输入的影响,尤其是如果这种情况会继续发生,则更难修复 Pariss(打字错误)而不模糊。

您显然需要意识到模糊连接不应该连接的风险。我曾经出现在错误的村庄,因为 Google 以错误的方式列出了他们(一个是双 R,另一个是单)