根据R中的字符串距离匹配两列
Match two columns based on string distance in R
我有两个包含人名的非常大的数据框。这两个数据框报告有关这些人的不同信息(即 df1 报告有关健康状况的数据,而 df2 报告有关社会经济状况的数据)。一部分人出现在两个数据框中。这是我感兴趣的示例。
我需要创建一个新的数据框,其中只包含出现在两个数据集中的那些人。但是,名称存在细微差异,主要是拼写错误。
我的数据如下:
df1
name | smoker | age
"Joe Smith" | Yes | 43
"Michael Fagin" | Yes | 35
"Ellen McFarlan" | No | 55
...
...
df2
name | occupation | location
"Joe Smit" | Postdoc | London
"Joan Evans" | IT consultant | Bristol
"Michael Fegin" | Lawyer | Liverpool
...
...
我需要的是具有以下信息的第三个数据帧 df3:
df3
name1 | name2 | distance | smoker | age | occupation | location
"Joe Smith" | "Joe Smit" | a measure of their Jaro distance | Yes | 43 | Postdoc | London
"Michael Fagin" | "Michael Fegin" | a measure of their Jaro distance | Yes | 35 | Lawyer | Liverpool
...
...
到目前为止,我已经使用 stringdist 包来获取可能匹配项的向量,但我正在努力使用此信息来创建包含我需要的信息的新数据框。如果有人对此有任何想法,请提前致谢!
library(tidyverse)
library(fuzzyjoin)
df1 <- tibble(
name = c("Joe Smith", "Michael Fagin"),
smoker = c("yes", "yes")
)
df2 <- tibble(
name = c("Joe Smit", "Michael Fegin"),
occupation = c("post doc", "IT consultant")
)
df1 %>%
# max 3 chars different
stringdist_inner_join(df2, max_dist = 3)
#> Joining by: "name"
#> # A tibble: 2 × 4
#> name.x smoker name.y occupation
#> <chr> <chr> <chr> <chr>
#> 1 Joe Smith yes Joe Smit post doc
#> 2 Michael Fagin yes Michael Fegin IT consultant
由 reprex package (v2.0.0)
创建于 2022-03-01
我有两个包含人名的非常大的数据框。这两个数据框报告有关这些人的不同信息(即 df1 报告有关健康状况的数据,而 df2 报告有关社会经济状况的数据)。一部分人出现在两个数据框中。这是我感兴趣的示例。 我需要创建一个新的数据框,其中只包含出现在两个数据集中的那些人。但是,名称存在细微差异,主要是拼写错误。
我的数据如下:
df1
name | smoker | age
"Joe Smith" | Yes | 43
"Michael Fagin" | Yes | 35
"Ellen McFarlan" | No | 55
...
...
df2
name | occupation | location
"Joe Smit" | Postdoc | London
"Joan Evans" | IT consultant | Bristol
"Michael Fegin" | Lawyer | Liverpool
...
...
我需要的是具有以下信息的第三个数据帧 df3:
df3
name1 | name2 | distance | smoker | age | occupation | location
"Joe Smith" | "Joe Smit" | a measure of their Jaro distance | Yes | 43 | Postdoc | London
"Michael Fagin" | "Michael Fegin" | a measure of their Jaro distance | Yes | 35 | Lawyer | Liverpool
...
...
到目前为止,我已经使用 stringdist 包来获取可能匹配项的向量,但我正在努力使用此信息来创建包含我需要的信息的新数据框。如果有人对此有任何想法,请提前致谢!
library(tidyverse)
library(fuzzyjoin)
df1 <- tibble(
name = c("Joe Smith", "Michael Fagin"),
smoker = c("yes", "yes")
)
df2 <- tibble(
name = c("Joe Smit", "Michael Fegin"),
occupation = c("post doc", "IT consultant")
)
df1 %>%
# max 3 chars different
stringdist_inner_join(df2, max_dist = 3)
#> Joining by: "name"
#> # A tibble: 2 × 4
#> name.x smoker name.y occupation
#> <chr> <chr> <chr> <chr>
#> 1 Joe Smith yes Joe Smit post doc
#> 2 Michael Fagin yes Michael Fegin IT consultant
由 reprex package (v2.0.0)
创建于 2022-03-01